home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / wbhires.s < prev    next >
Text File  |  1997-01-31  |  170KB  |  12,003 lines

  1.  
  2.  
  3. *************************************************
  4. * Stuff to do to get a C2P version:
  5. * Change copperlist
  6. * Change wall drawing
  7. * change floor drawing
  8. * change object drawing
  9. * change polygon drawing (ugh)
  10. * Write a palette generator program in AMOS
  11. * to provide a good 256 colour palette and
  12. * convert all graphics files specified
  13. * (possibly included in the game linker
  14. * program).
  15. * Possibly change the wall/floor/object
  16. * palettes to look nicer with more shades.
  17. * RE-implement stippling (if not present)
  18. * as it will look gorgeous now.
  19. *************************************************
  20.  
  21. ;MIDDLEX set 96
  22. ;RIGHTX set 191
  23. ;BOTTOMY set 160 
  24.  
  25. ;MIDDLEX set 96
  26. ;RIGHTX set 191
  27. ;BOTTOMY set 160
  28.  
  29. _break    macro
  30. ;    bkpt    \1
  31.     endm
  32.  
  33.  
  34. FILTER    macro
  35. ;    move.l    d0,-(sp)
  36. ;    move.l    #65000,d0
  37. ;.loop\@
  38. ;    bchg    #1,$bfe001
  39. ;    dbra    d0,.loop\@
  40. ;    move.l    (sp)+,d0
  41.     endm
  42.  
  43. BLACK    macro
  44.     move.w    #0,$dff180
  45.     endm
  46.  
  47. RED    macro
  48.     move.w    #$f00,$dff180
  49.     endm
  50.  
  51. FLASHER macro
  52. ;    movem.l    d1,-(sp)
  53. ;    move.w    #-1,d1
  54. ;
  55. ;loop3\@
  56. ;;    move.w    #\1,$dff180
  57. ;    nop
  58. ;    nop
  59. ;    move.w    #\2,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    dbra    d1,loop3\@
  63.  
  64. ;    movem.l    (sp)+,d1
  65.  
  66.     endm
  67.  
  68. GREEN    macro
  69.     move.w    #$0f0,$dff180
  70.     endm
  71.  
  72. BLUE    macro
  73.     move.w    #$f,$dff180
  74.     endm
  75.  
  76. DataCacheOff macro
  77.     movem.l    a0-a6/d0-d7,-(sp)
  78.     move.l    4.w,a6
  79.     moveq    #0,d0
  80.     move.l    #%0000000100000000,d1
  81.     jsr    _LVOCacheControl(a6)
  82.     movem.l    (sp)+,a0-a6/d0-d7
  83.     endm
  84.  
  85. DataCacheOn macro
  86.     movem.l    a0-a6/d0-d7,-(sp)
  87.     move.l    4.w,a6
  88.     moveq    #-1,d0
  89.     move.l    #%0000000100000000,d1
  90.     jsr    _LVOCacheControl(a6)
  91.     movem.l    (sp)+,a0-a6/d0-d7
  92.     endm
  93.  
  94.     opt    P=68020
  95.  
  96.     include utils:sysinc/hardware/intbits.i
  97.     include    workbench:utilities/devpac/system            use pre-assembled header
  98.     include    exec/exec_lib.i
  99.     include    intuition/intuition.i
  100.     include    intuition/intuition_lib.i
  101.     include    graphics/graphics_lib.i
  102.     include    graphics/text.i
  103.  
  104.  
  105. CD32VER equ 0
  106.  
  107. maxscrdiv EQU 8
  108. max3ddiv EQU 5
  109. playerheight EQU 12*1024
  110. playercrouched EQU 8*1024
  111. scrheight EQU 80
  112.  
  113. ; k/j/m
  114.  
  115. ; 4/8
  116. ; s/x
  117. ; b/n
  118.  
  119. midoffset EQU 104*4*40
  120.  
  121.  
  122.  SECTION Scrn,CODE
  123. OpenLib       equ -552
  124. CloseLib      equ -414
  125.  
  126. INTREQ        equ    $09C
  127. INTENA        equ    $09A
  128. INTENAR    equ    $01C
  129. DMACON        equ    $096
  130.  
  131. SERPER        equ    $032
  132. SERDATR    equ    $018
  133. SERDAT        equ    $030
  134. vhposr        equ $006    
  135. vhposrl    equ $007 
  136.  
  137. bltcon0    equ $40 
  138. bltcon1    equ $42
  139. bltcpt        equ $48
  140. bltbpt        equ $4c
  141. bltapt        equ $50
  142. spr0ctl    equ $142
  143. spr1ctl    equ $14a
  144. spr2ctl    equ $152
  145. spr3ctl    equ $15a
  146. spr4ctl    equ $162
  147. spr5ctl    equ $16a
  148. spr6ctl    equ $172
  149. spr7ctl    equ $17a
  150. spr0pos    equ $140
  151. spr1pos    equ $148
  152. spr2pos    equ $150
  153. spr3pos    equ $158
  154. spr4pos    equ $160
  155. spr5pos    equ $168
  156. spr6pos    equ $170
  157. spr7pos    equ $178
  158. bltdpt         equ $54
  159. bltafwm    equ $44
  160. bltalwm    equ $46
  161. bltsize         equ $58
  162. bltcmod         equ $60
  163. bltbmod         equ $62
  164. bltamod         equ $64
  165. bltdmod         equ $66
  166. diwstart        equ $8e         ; Screen hardware registers.
  167. diwstop         equ $90
  168. ddfstart        equ $92
  169. ddfstop         equ $94
  170. bplcon0         equ $100
  171. bplcon1         equ $102
  172. col0            equ $180
  173. col1            equ $182
  174. col2        equ $184
  175. col3        equ $186
  176. col4        equ $188
  177. col5        equ $18a
  178. col6        equ $18c
  179. col7        equ $18e
  180. col8            equ $190
  181. col9            equ $192
  182. col10           equ $194
  183. col11           equ $196
  184. col12           equ $198
  185. col13           equ $19a
  186. dmacon        equ $96
  187. dmaconr        equ $002
  188. intenar        equ $01c
  189. intena        equ $09a
  190. intreq        equ $09c
  191. intreqr        equ $01e
  192. intreqrl    equ $01f
  193. bpl1pth         equ $e0
  194. bpl1ptl         equ $e2
  195. bpl2pth        equ $e4
  196. bpl2ptl        equ $e6
  197. bpl3pth        equ $e8
  198. bpl3ptl        equ $ea
  199. bpl4pth        equ $ec
  200. bpl4ptl        equ $ee
  201. bpl5pth        equ $f0
  202. bpl5ptl        equ $f2
  203. bpl6pth        equ $f4
  204. bpl6ptl        equ $f6
  205. bpl7pth        equ $f8
  206. bpl7ptl        equ $fa
  207. bpl8pth        equ $fc
  208. bpl8ptl        equ $fe
  209. spr0pth        equ $120
  210. spr0ptl        equ $122
  211. spr1pth        equ $124
  212. spr1ptl        equ $126
  213. spr2pth        equ $128
  214. spr2ptl        equ $12a
  215. spr3pth        equ $12c
  216. spr3ptl        equ $12e
  217. spr4pth        equ $130
  218. spr4ptl        equ $132
  219. spr5pth        equ $134
  220. spr5ptl        equ $136
  221. spr6pth        equ $138
  222. spr6ptl        equ $13a
  223. spr7pth        equ $13c
  224. spr7ptl        equ $13e
  225. adkcon        equ   $09E
  226.  
  227.  
  228. ; move.l #length,d0
  229. ; moveq.l #2,d1    ; chipmem
  230. ; move.l 4.w,a6
  231. ; jsr allocmem(a6) = -198
  232.  
  233. ; tst.l d0
  234. ; beq.s ohbugger
  235. ; move.l d0,memaddr
  236.  
  237.  
  238. ; move.l 4.w,a6
  239. ; move.l memaddr,a1
  240. ; move.l #size,d0
  241. ; jsr freemem(a6) =-210
  242.  
  243.  
  244. ** This waits for the blitter to finish before allowing program
  245. ** execution to continue.
  246.  
  247.  
  248.  include "ab3:source_4000/protsetupdecode"
  249.  
  250. SAVEREGS MACRO
  251.  movem.l d0-d7/a0-a6,-(a7)
  252.  ENDM
  253.  
  254. GETREGS MACRO
  255.  movem.l (a7)+,d0-d7/a0-a6
  256.  ENDM
  257.  
  258.  
  259. WB MACRO
  260. \@bf:
  261.  btst #6,dmaconr(a6)
  262.  bne.s \@bf
  263.  ENDM
  264.  
  265. WBa MACRO
  266. \@bf:
  267.  move.w #\2,$dff180
  268.  
  269.  btst #6,$bfe001
  270.  bne.s \@bf
  271. \@bz:
  272.  
  273.  move.w #$f0f,$dff180
  274.  
  275.  btst #6,$bfe001
  276.  beq.s \@bz
  277.  
  278.  ENDM
  279.  
  280. *Another version for when a6 <> dff000
  281.  
  282. WBSLOW MACRO
  283. \@bf:
  284.  btst #6,$dff000+dmaconr
  285.  bne.s \@bf
  286.  ENDM
  287.  
  288. WT MACRO
  289. \@bf:
  290.  btst #6,(a3)
  291.  bne.s \@bd
  292.  rts
  293. \@bd: 
  294.  btst #4,(a0)
  295.  beq.s \@bf
  296.  ENDM
  297.  
  298. WTNOT MACRO
  299. \@bf:
  300.  btst #6,(a3)
  301.  bne.s \@bd
  302.  rts
  303. \@bd: 
  304.  btst #4,(a0)
  305.  bne.s \@bf
  306.  ENDM
  307.  
  308. **
  309.  
  310.  include "ab3:source_4000/ProtectionProtection"
  311.  include "ab3:includes/macros.i"
  312.  include "ab3:source_4000/defs.i"
  313.  
  314.  move.w (a0)+,mors
  315.  
  316. ;    FLASHER $0f0,$fff
  317.  
  318. ; PROTFCALC
  319. ; PROTGCALC
  320. ; PROTHCALC
  321. ; PROTICALC
  322. ; PROTKCALC
  323. ; PROTLCALC
  324. ; PROTMCALC
  325.  
  326.  move.l #PALETTEBIT,a0
  327.  move.l #COPIEDPAL+4,a1
  328.  move.w #255,d0
  329.  
  330. copydown:
  331.  move.b 1(a0),(a1)
  332.  move.b 3(a0),4(a1)
  333.  move.b 5(a0),8(a1)
  334.  add.w #6,a0
  335.  add.w #12,a1
  336.  dbra d0,copydown
  337.  
  338.  
  339.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  340.  move.w intenar(a6),_storeint
  341.  and.w #$c000,_storeint
  342.  
  343.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  344.  
  345.  
  346.  st GOURSEL
  347.  
  348.  move.l 4.w,a6
  349.  lea VBLANKInt(pc),a1
  350.  moveq #INTB_COPER,d0
  351.  jsr _LVOAddIntServer(a6)
  352.  
  353.     IFEQ CD32VER
  354. ; move.l 4.w,a6
  355. ; lea KEYInt(pc),a1
  356. ; moveq #INTB_PORTS,d0
  357. ; jsr _LVOAddIntServer(a6)
  358.     ENDC
  359.  
  360.  IFNE CD32VER
  361.  clr.b PLR1KEYS
  362.  clr.b PLR1PATH
  363.  clr.b PLR1MOUSE
  364.  st PLR1JOY
  365.  clr.b PLR2KEYS
  366.  clr.b PLR2PATH
  367.  clr.b PLR2MOUSE
  368.  st PLR2JOY
  369.  ELSE
  370.  st PLR1KEYS
  371.  clr.b PLR1PATH
  372.  clr.b PLR1MOUSE
  373.  clr.b PLR1JOY
  374.  st PLR2KEYS
  375.  clr.b PLR2PATH
  376.  clr.b PLR2MOUSE
  377.  clr.b PLR2JOY
  378.  ENDC
  379.  
  380.  PRSDO
  381.  
  382.  move.l #2,d1    
  383.  move.l #10240*2,d0
  384.  move.l 4.w,a6
  385.  jsr -198(a6)
  386.  move.l d0,TEXTSCRN
  387.  move.w d0,TSPTl
  388.  swap d0
  389.  move.w d0,TSPTh
  390.  
  391.  move.l #nullspr,d0
  392.  move.w d0,txs0l
  393.  move.w d0,txs1l
  394.  move.w d0,txs2l
  395.  move.w d0,txs3l
  396.  move.w d0,txs4l
  397.  move.w d0,txs5l
  398.  move.w d0,txs6l
  399.  move.w d0,txs7l
  400.  swap d0
  401.  move.w d0,txs0h
  402.  move.w d0,txs1h
  403.  move.w d0,txs2h
  404.  move.w d0,txs3h
  405.  move.w d0,txs4h
  406.  move.w d0,txs5h
  407.  move.w d0,txs6h
  408.  move.w d0,txs7h 
  409.  
  410.  move.l #1,d1    
  411.  move.l #120000,d0
  412.  move.l 4.w,a6
  413.  jsr -198(a6)
  414.  move.l d0,LEVELDATA
  415.  
  416.  move.l #1,d1    
  417.  move.l #2*320*256,d0
  418.  move.l 4.w,a6
  419.  jsr -198(a6)
  420.  move.l d0,FASTBUFFER
  421.  
  422.  jsr START
  423.  
  424.  rts
  425.  
  426. FASTBUFFER: dc.l 0
  427. _storeint
  428.     dc.w 0
  429.  
  430. * Load level into buffers.
  431.  clr.b doanything
  432.  clr.b dosounds
  433.  
  434. ; DRAW TEXT SCREEN
  435.  
  436. TWEENTEXT:
  437.  
  438.  move.l #LEVELTEXT,a0
  439.  move.w PLOPT,d0
  440.  muls #82*16,d0
  441.  add.l d0,a0
  442.  
  443.  move.w #14,d7
  444.  move.w #0,d0
  445. DOWNTEXT:
  446.  move.l TEXTSCRN,a1
  447.  jsr DRAWLINEOFTEXT
  448.  addq #1,d0
  449.  add.w #82,a0
  450.  dbra d7,DOWNTEXT
  451.  rts
  452.  
  453. FONTADDRS:
  454.  dc.l ENDFONT0,CHARWIDTHS0
  455.  dc.l ENDFONT1,CHARWIDTHS1
  456.  dc.l ENDFONT2,CHARWIDTHS2
  457.  
  458. ENDFONT0:
  459.  incbin "ab3:includes/endfont0"
  460. CHARWIDTHS0:
  461.  incbin "ab3:includes/charwidths0"
  462. ENDFONT1:
  463.  incbin "ab3:includes/endfont1"
  464. CHARWIDTHS1:
  465.  incbin "ab3:includes/charwidths1"
  466. ENDFONT2:
  467.  incbin "ab3:includes/endfont2"
  468. CHARWIDTHS2:
  469.  incbin "ab3:includes/charwidths2"
  470.  
  471.  even
  472.  
  473. DRAWLINEOFTEXT:
  474.  movem.l d0/a0/d7,-(a7)
  475.  
  476.  muls #80*16,d0
  477.  add.l d0,a1    ; screen pointer
  478.  
  479.  move.l #FONTADDRS,a3
  480.  moveq #0,d0
  481.  move.b (a0)+,d0
  482.  move.l (a3,d0.w*8),a2
  483.  move.l 4(a3,d0.w*8),a3
  484.  
  485.  moveq #0,d1    ; width counter:
  486.  move.w #79,d6
  487.  tst.b (a0)+
  488.  beq.s NOTCENTRED
  489.  moveq #-1,d5
  490.  move.l a0,a4
  491.  moveq #0,d2
  492.  moveq #0,d3
  493.  move.w #79,d0    ; number of chars
  494. .addup:
  495.  addq #1,d5
  496.  move.b (a4)+,d2
  497.  move.b -32(a3,d2.w),d4
  498.  add.w d4,d3
  499.  cmp.b #32,d2
  500.  beq.s .DONTPUTIN
  501.  move.w d5,d6
  502.  move.w d3,d1
  503. .DONTPUTIN:
  504.  dbra d0,.addup
  505.  asr.w #1,d1
  506.  neg.w d1
  507.  add.w #320,d1    ; horiz pos of start x
  508.  
  509. NOTCENTRED:
  510.  move.w d6,d7
  511. DOACHAR:
  512.  moveq #0,d2
  513.  move.b (a0)+,d2
  514.  sub.w #32,d2
  515.  moveq #0,d6
  516.  move.b (a3,d2.w),d6
  517.  asl.w #5,d2
  518.  lea (a2,d2.w),a4    ; char font
  519. val SET 0
  520.  REPT 16
  521.  move.w (a4)+,d0
  522.  bfins d0,val(a1){d1:d6}
  523. val SET val+80
  524.  ENDR
  525.  add.w d6,d1
  526.  dbra d7,DOACHAR
  527.  movem.l (a7)+,d0/a0/d7
  528.  rts 
  529.  
  530.  
  531. CLRTWEENSCRN:
  532.  move.l TEXTSCRN,a0
  533.  move.w #(10240/16)-1,d0
  534.  move.l #$0,d1
  535. .lll
  536.  move.l d1,(a0)+
  537.  move.l d1,(a0)+
  538.  move.l d1,(a0)+
  539.  move.l d1,(a0)+
  540.  move.l d1,(a0)+
  541.  move.l d1,(a0)+
  542.  move.l d1,(a0)+
  543.  move.l d1,(a0)+
  544.  dbra d0,.lll
  545.  rts
  546.  
  547. PLAYTHEGAME:
  548.  
  549.  move.w #0,TXTCOLL
  550.  
  551.  bsr CLRTWEENSCRN
  552.  
  553.  cmp.b #'n',mors
  554.  bne.s .notext
  555.  bsr TWEENTEXT
  556. .notext
  557.  
  558. ;charlie 
  559. ; move.l #TEXTCOP,$dff080
  560.  
  561.  move.w #$10,d0
  562.  move.w #7,d1
  563.  
  564. ;.fdup
  565. ; move.w d0,TXTCOLL
  566. ; add.w #$121,d0
  567. ;.wtframe:
  568. ; btst #5,$dff000+intreqrl
  569. ; beq.s .wtframe
  570. ; move.w #$0020,$dff000+intreq
  571. ; dbra d1,.fdup
  572. ;
  573. ; jsr INITCOPPERSCRN
  574.  
  575. ; Get level memory.
  576.  
  577.  move.l #1,d1
  578.  move.l #50000,d0
  579.  move.l 4.w,a6
  580.  jsr -198(a6)
  581.  move.l d0,LEVELGRAPHICS
  582.  
  583.  move.l #1,d1
  584.  move.l #40000,d0
  585.  move.l 4.w,a6
  586.  jsr -198(a6)
  587.  move.l d0,LEVELCLIPS
  588.  
  589.  move.l #$dff000,a6
  590.  jsr SETPLAYERS
  591.  
  592. ; move.l #LEVELDATAD,LEVELDATA
  593. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  594. ; move.l #LEVELCLIPSD,LEVELCLIPS
  595.  
  596. ; bra noload
  597.  
  598. *********************************
  599.  
  600.  move.l doslib,a6
  601.  move.l #LLname,d1
  602.  move.l #1005,d2
  603.  jsr -30(a6)
  604.  move.l d0,LLhandle
  605.  
  606.  move.l doslib,a6
  607.  move.l d0,d1
  608.  move.l #LINKS,d2
  609.  move.l #10000,d3
  610.  jsr -42(a6)
  611.  
  612.  move.l doslib,a6
  613.  move.l LLhandle,d1
  614.  jsr -36(a6)
  615.  
  616.  ********************************
  617.  
  618.  move.l doslib,a6
  619.  move.l #LLFname,d1
  620.  move.l #1005,d2
  621.  jsr -30(a6)
  622.  move.l d0,LLhandle
  623.  
  624.  move.l doslib,a6
  625.  move.l d0,d1
  626.  move.l #FLYLINKS,d2
  627.  move.l #10000,d3
  628.  jsr -42(a6)
  629.  
  630.  move.l doslib,a6
  631.  move.l LLhandle,d1
  632.  jsr -36(a6)
  633.  
  634.  ********************************
  635.  
  636.  
  637.  move.l doslib,a6
  638.  move.l #LDname,d1
  639.  move.l #1005,d2
  640.  jsr -30(a6)
  641.  move.l d0,LDhandle
  642.  
  643.  move.l doslib,a6
  644.  move.l d0,d1
  645.  move.l LEVELCLIPS,d2
  646.  move.l #40000,d3
  647.  jsr -42(a6)
  648.  
  649.  move.l doslib,a6
  650.  move.l LDhandle,d1
  651.  jsr -36(a6)
  652.  
  653. *************************************
  654.     move.l    LEVELCLIPS,d0
  655.     moveq    #0,d1
  656.     move.l LEVELDATA,a0
  657.     lea    WorkSpace,a1
  658.     lea    $0,a2
  659.     jsr    unLHA
  660. *************************************
  661.  
  662. ********
  663.  
  664.  move.l doslib,a6
  665.  move.l #LGname,d1
  666.  move.l #1005,d2
  667.  jsr -30(a6)
  668.  move.l d0,LGhandle
  669.  
  670.  move.l doslib,a6
  671.  move.l d0,d1
  672.  move.l LEVELCLIPS,d2
  673.  move.l #40000,d3
  674.  jsr -42(a6)
  675.  
  676.  move.l doslib,a6
  677.  move.l LGhandle,d1
  678.  jsr -36(a6)
  679.  
  680. *************************************
  681.     move.l    LEVELCLIPS,d0
  682.     moveq    #0,d1
  683.     move.l LEVELGRAPHICS,a0
  684.     lea    WorkSpace,a1
  685.     lea    $0,a2
  686.     jsr    unLHA
  687. *************************************
  688.  
  689. ********
  690.  
  691.  move.l doslib,a6
  692.  move.l #LCname,d1
  693.  move.l #1005,d2
  694.  jsr -30(a6)
  695.  move.l d0,LChandle
  696.  
  697.  move.l doslib,a6
  698.  move.l d0,d1
  699.  move.l #WorkSpace+16384,d2
  700.  move.l #16000,d3
  701.  jsr -42(a6)
  702.  
  703.  move.l doslib,a6
  704.  move.l LChandle,d1
  705.  jsr -36(a6)
  706.  
  707. *************************************
  708.     move.l    #WorkSpace+16384,d0
  709.     moveq    #0,d1
  710.     move.l LEVELCLIPS,a0
  711.     lea    WorkSpace,a1
  712.     lea    $0,a2
  713.     jsr    unLHA
  714. *************************************
  715.  
  716.  
  717. *******
  718.  
  719. noload:
  720.  
  721. ********
  722.  
  723. ; move.l doslib,a6
  724. ; move.l #Prefsname,d1
  725. ; move.l #1005,d2
  726. ; jsr -30(a6)
  727. ; move.l d0,Prefshandle
  728.  
  729. ; move.l doslib,a6
  730. ; move.l d0,d1
  731. ; move.l #Prefsfile,d2
  732. ; move.l #50,d3
  733. ; jsr -42(a6)
  734.  
  735. ; move.l doslib,a6
  736. ; move.l Prefshandle,d1
  737. ; jsr -36(a6)
  738.  
  739. *******
  740.  
  741.  IFNE CD32VER
  742.  move.l doslib,a6
  743.  move.l #115,d1
  744.  jsr -198(a6)
  745.  ENDC
  746.  
  747.  
  748. ; move.l doslib,d0
  749. ; move.l d0,a1
  750. ; move.l 4.w,a6
  751. ; jsr CloseLib(a6)
  752.  
  753.  move.l #$dff000,a6
  754.  
  755. charlie:
  756. ; jmp  ENDGAMESCROLL
  757.  
  758.     move.w #$87c0,dmacon(a6)
  759.  
  760.     move.w    #%1000000000100000,dmacon(a6)
  761.  
  762. ; move.w intenar(a6),saveinters
  763.     
  764. ;    move.w #%00001111,intena(a6)
  765.  
  766.     move.w #255,adkcon(a6)
  767.  
  768.  
  769. *** Put myself in supervisor mode
  770.  
  771.  bra blag
  772. ; move.l $6c,d0
  773. ; move.l #blag,$6c
  774. ; move.w #$8010,intreq(a6)
  775.  
  776.  rts
  777.  
  778. saveit: ds.l 10
  779. doslibname: dc.b 'dos.library',0
  780.  even
  781. doslib: dc.l 0
  782.  
  783. mors: dc.w 0
  784.  
  785. LDname: dc.b 'ab3d2:levels/level_'
  786. LEVA:
  787.  dc.b 'a/twolev.bin',0
  788.  even
  789. LDhandle: dc.l 0
  790. LGname: dc.b 'ab3d2:levels/level_'
  791. LEVB:
  792.  dc.b 'a/twolev.graph.bin',0
  793.  even
  794. LGhandle: dc.l 0
  795. LCname: dc.b 'ab3d2:levels/level_'
  796. LEVC:
  797.  dc.b 'a/twolev.clips',0
  798.  even
  799. LChandle: dc.l 0
  800. LLname: dc.b 'ab3d2:levels/level_'
  801. LEVD:
  802.  dc.b 'a/twolev.map',0
  803.  even
  804. LLhandle: dc.l 0
  805. LLFname: dc.b 'ab3d2:levels/level_'
  806. LEVE:
  807.  dc.b 'a/twolev.FLYmap',0
  808.  even
  809.  
  810.     cnop    0,4
  811.  
  812. Prefsname: dc.b 'ram:prefs',0
  813.  even
  814. Prefshandle: dc.l 0
  815.  
  816. Prefsfile:
  817.  dc.b 'k4nx'
  818.  ds.b 50
  819.  
  820.  even
  821.  
  822.  cnop 0,4
  823.  
  824. VBLANKInt
  825.  dc.l 0,0
  826.  dc.b NT_INTERRUPT,9
  827.  dc.l Prefsname
  828.  dc.l 0
  829.  dc.l Chan0inter
  830.  
  831.  
  832. KEYInt
  833.  dc.l 0,0
  834.  dc.b NT_INTERRUPT,127
  835.  dc.l Prefsname
  836.  dc.l 0
  837.  dc.l key_interrupt
  838.  
  839.  
  840. blag:
  841. ; move.w #$10,intreq(a6)
  842. ; move.l d0,$6c
  843. ; move.w #$7fff,intena(a6)
  844.  
  845. ; move.w #$20,$dff1dc
  846.  
  847. ; move.l 4.w,a6
  848. ; lea VBLANKInt(pc),a1
  849. ; moveq #INTB_VERTB,d0
  850. ; jsr _LVOAddIntServer(a6)
  851.  
  852. ****************************
  853. * Initialize level
  854. ****************************
  855. * Poke all clip offsets into
  856. * correct bit of level data.
  857. ****************************
  858.  move.l LEVELGRAPHICS,a0
  859.  move.l 12(a0),a1
  860.  add.l a0,a1
  861.  move.l a1,ZoneGraphAdds
  862.  move.l (a0),a1
  863.  add.l a0,a1
  864.  move.l a1,DoorData
  865.  move.l 4(a0),a1
  866.  add.l a0,a1
  867.  move.l a1,LiftData
  868.  move.l 8(a0),a1
  869.  add.l a0,a1
  870.  move.l a1,SwitchData
  871.  adda.w #16,a0
  872.  move.l a0,ZoneAdds
  873.  
  874.  move.l LEVELDATA,a4
  875.  lea 160*10(a4),a1
  876.  
  877.  lea 54(a1),a2
  878.  move.l a2,CPtPos
  879.  move.w 12(a1),NumCPts
  880.  move.w 14(a1),NumLevPts
  881.  
  882.  move.l 16+6(a1),a2
  883.  add.l a4,a2
  884.  move.l a2,Points
  885.  move.w 8+6(a1),d0
  886.  lea 4(a2,d0.w*4),a2
  887.  move.l a2,PointBrights
  888.  move.w 16(a1),d0
  889.  addq #1,d0
  890.  muls #80,d0
  891.  add.l d0,a2
  892.  move.l a2,ZoneBorderPts
  893.  
  894.  move.l 20+6(a1),a2
  895.  add.l a4,a2
  896.  move.l a2,FloorLines
  897.  
  898.  move.l 24+6(a1),a2
  899.  add.l a4,a2
  900.  move.l a2,ObjectData
  901. *****************************************
  902. * Just for charles
  903.  
  904. ; move.w #$6060,6(a2)
  905. ; move.l #$d0000,8(a2)
  906. ; sub.w #40,4(a2)
  907. ; move.w #45*256+45,14(a2)
  908. ****************************************
  909.  move.l 28+6(a1),a2
  910.  add.l a4,a2
  911.  move.l a2,PlayerShotData
  912.  move.l 32+6(a1),a2
  913.  add.l a4,a2
  914.  move.l a2,NastyShotData
  915.  
  916.  add.l #64*20,a2
  917.  move.l a2,OtherNastyData
  918.  
  919.  move.l 36+6(a1),a2
  920.  add.l a4,a2
  921.  move.l a2,ObjectPoints  
  922.  move.l 40+6(a1),a2
  923.  add.l a4,a2
  924.  move.l a2,PLR1_Obj
  925.  move.l 44+6(a1),a2
  926.  add.l a4,a2
  927.  move.l a2,PLR2_Obj
  928.  move.w 14+6(a1),NumObjectPoints
  929.  
  930. ; bra noclips
  931.   
  932.  move.l LEVELCLIPS,a2
  933.  moveq #0,d0
  934.  move.w 10+6(a1),d7    ;numzones
  935.  move.w d7,NUMZONES
  936. assignclips:
  937.  move.l (a0)+,a3
  938.  add.l a4,a3    ; pointer to a zone
  939.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  940. dowholezone:
  941.  tst.w (a3)
  942.  blt.s nomorethiszone
  943.  tst.w 2(a3)
  944.  blt.s thisonenull
  945.  
  946.  move.l d0,d1
  947.  asr.l #1,d1
  948.  move.w d1,2(a3)
  949.  
  950. findnextclip:
  951.  cmp.w #-2,(a2,d0.l)
  952.  beq.s foundnextclip
  953.  addq.l #2,d0
  954.  bra.s findnextclip
  955. foundnextclip
  956.  addq.l #2,d0
  957.  
  958. thisonenull:
  959.  addq #8,a3 
  960.  bra.s dowholezone
  961. nomorethiszone:
  962.  dbra d7,assignclips
  963.  
  964.  lea (a2,d0.l),a2
  965.  move.l a2,CONNECT_TABLE
  966.  
  967. noclips:
  968.  
  969. * Put in addresses of glowything
  970.  
  971.  
  972. ************************************
  973.  
  974. ; cmp.b #'k',Prefsfile
  975. ; bne.s nkb
  976.  
  977. ;nkb:
  978. ; cmp.b #'m',Prefsfile
  979. ; bne.s nmc
  980. ; clr.b PLR1KEYS
  981. ; clr.b PLR1PATH
  982. ; st PLR1MOUSE
  983. ; clr.b PLR1JOY
  984. ;nmc:
  985. ; cmp.b #'j',Prefsfile
  986. ; bne.s njc
  987. ; clr.b PLR1KEYS
  988. ; clr.b PLR1PATH
  989. ; clr.b PLR1MOUSE
  990. ; st PLR1JOY
  991. ;njc:
  992.  
  993.  clr.b PLR1_StoodInTop
  994.  move.l #playerheight,PLR1s_height
  995.  
  996.  move.l #empty,pos1LEFT
  997.  move.l #empty,pos2LEFT
  998.  move.l #empty,pos1RIGHT
  999.  move.l #empty,pos2RIGHT
  1000.  move.l #empty,pos0LEFT
  1001.  move.l #empty,pos3LEFT
  1002.  move.l #empty,pos0RIGHT
  1003.  move.l #empty,pos3RIGHT
  1004.  move.l #emptyend,Samp0endLEFT
  1005.  move.l #emptyend,Samp1endLEFT
  1006.  move.l #emptyend,Samp0endRIGHT
  1007.  move.l #emptyend,Samp1endRIGHT
  1008.  move.l #emptyend,Samp2endLEFT
  1009.  move.l #emptyend,Samp3endLEFT
  1010.  move.l #emptyend,Samp2endRIGHT
  1011.  move.l #emptyend,Samp3endRIGHT
  1012.  
  1013.  
  1014.  move.l #nullline,d0
  1015.  move.w d0,n1l
  1016.  swap d0
  1017.  move.w d0,n1h
  1018.  
  1019.  move.l Panel,d0
  1020.  move.w d0,p1l
  1021.  swap d0
  1022.  move.w d0,p1h
  1023.  swap d0
  1024.  add.l #40,d0
  1025.  move.w d0,p2l
  1026.  swap d0
  1027.  move.w d0,p2h
  1028.  swap d0
  1029.  add.l #40,d0
  1030.  move.w d0,p3l
  1031.  swap d0
  1032.  move.w d0,p3h
  1033.  swap d0
  1034.  add.l #40,d0
  1035.  move.w d0,p4l
  1036.  swap d0
  1037.  move.w d0,p4h
  1038.  swap d0
  1039.  add.l #40,d0
  1040.  move.w d0,p5l
  1041.  swap d0
  1042.  move.w d0,p5h
  1043.  swap d0
  1044.  add.l #40,d0
  1045.  move.w d0,p6l
  1046.  swap d0
  1047.  move.w d0,p6h
  1048.  swap d0
  1049.  add.l #40,d0
  1050.  move.w d0,p7l
  1051.  swap d0
  1052.  move.w d0,p7h
  1053.  swap d0
  1054.  add.l #40,d0
  1055.  move.w d0,p8l
  1056.  swap d0
  1057.  move.w d0,p8h
  1058.  
  1059. *******************************
  1060. * TIMER SCREEN SETUP
  1061. ; move.l #TimerScr,d0
  1062. ; move.w d0,p1l
  1063. ; swap d0
  1064. ; move.w d0,p1h
  1065. ; move.w #$1201,Panelcon
  1066.  
  1067.  move.l #borders,d0
  1068.  move.w d0,s0l
  1069.  swap d0
  1070.  move.w d0,s0h
  1071.  move.l #borders+2592,d0
  1072.  move.w d0,s1l
  1073.  swap d0
  1074.  move.w d0,s1h
  1075.  move.l #borders+2592*2,d0
  1076.  move.w d0,s2l
  1077.  swap d0
  1078.  move.w d0,s2h
  1079.  move.l #borders+2592*3,d0
  1080.  move.w d0,s3l
  1081.  swap d0
  1082.  move.w d0,s3h
  1083.  
  1084.  move.l #nullspr,d0
  1085.  move.w d0,s0l
  1086.  move.w d0,s1l
  1087.  move.w d0,s2l
  1088.  move.w d0,s3l
  1089.  
  1090.  move.w d0,s4l
  1091.  move.w d0,s5l
  1092.  move.w d0,s6l
  1093.  move.w d0,s7l
  1094.  swap d0
  1095.  
  1096.  move.w d0,s0h
  1097.  move.w d0,s1h
  1098.  move.w d0,s2h
  1099.  move.w d0,s3h
  1100.  
  1101.  move.w d0,s4h
  1102.  move.w d0,s5h
  1103.  move.w d0,s6h
  1104.  move.w d0,s7h 
  1105.  
  1106.  
  1107.  move.w #52*256+64,borders
  1108.  move.w #212*256+0,borders+8
  1109.  move.w #52*256+64,borders+2592
  1110.  move.w #212*256+128,borders+8+2592
  1111.  move.w #52*256+192,borders+2592*2
  1112.  move.w #212*256+0,borders+8+2592*2
  1113.  move.w #52*256+192,borders+2592*3
  1114.  move.w #212*256+128,borders+8+2592*3
  1115.  
  1116.   
  1117.  
  1118. ; move.l #bigfield,d0
  1119. ; move.w d0,ocl
  1120. ; swap d0
  1121. ; move.w d0,och
  1122.  
  1123.  bset.b #1,$bfe001
  1124.  
  1125. ; jmp stuff
  1126. ;endstuff:
  1127.  
  1128.  move.w #$00ff,$dff09e
  1129.  
  1130. ; move.l #Blurbfield,$dff080
  1131.  
  1132.  move.w #0,d0
  1133.  
  1134.  
  1135.  
  1136. ****************************
  1137.  jsr INITPLAYER
  1138. ; bsr initobjpos
  1139. ****************************
  1140.  
  1141.  
  1142.  move.l #$dff000,a6
  1143.  
  1144.  move.l #null,$dff0a0
  1145.  move.w #100,$dff0a4
  1146.  move.w #443,$dff0a6
  1147.  move.w #63,$dff0a8
  1148.  
  1149.  move.l #null2,$dff0b0
  1150.  move.w #100,$dff0b4
  1151.  move.w #443,$dff0b6
  1152.  move.w #63,$dff0b8
  1153.  
  1154.  move.l #null4,$dff0c0
  1155.  move.w #100,$dff0c4
  1156.  move.w #443,$dff0c6
  1157.  move.w #63,$dff0c8
  1158.  
  1159.  move.l #null3,$dff0d0
  1160.  move.w #100,$dff0d4
  1161.  move.w #443,$dff0d6
  1162.  move.w #63,$dff0d8
  1163.  
  1164.  move.l #tab,a1
  1165.  move.w #64,d7
  1166.  move.w #0,d6
  1167. outerlop
  1168.  move.l #pretab,a0
  1169.  move.w #255,d5
  1170. scaledownlop:
  1171.  move.b (a0)+,d0
  1172.  ext.w d0
  1173.  ext.l d0
  1174.  muls d6,d0
  1175.  asr.l #6,d0
  1176.  move.b d0,(a1)+
  1177.  dbra d5,scaledownlop
  1178.  addq #1,d6
  1179.  dbra d7,outerlop
  1180.  
  1181.  move.l #$dff000,a6
  1182.  
  1183.  move.w #$c018,intena(a6)
  1184.  
  1185.  move.w #$f,dmacon(a6)
  1186.  move.w #$820f,dmacon(a6)
  1187.  
  1188. ; bsr protinit
  1189.  
  1190.  
  1191. ; move.w #$20,$1dc(a6)
  1192.  
  1193.  move.w #$0,$dff034
  1194.  move.w #0,Conditions
  1195.  
  1196.  cmp.b #'n',mors
  1197.  beq.s .nokeys
  1198.  move.w #%111111111111,Conditions
  1199. .nokeys:
  1200.  
  1201.  move.l #KeyMap,a5
  1202.  clr.b $45(a5)
  1203.  
  1204.  move.l #ingame,mt_data
  1205.  clr.b UseAllChannels
  1206.  
  1207. ; cmp.b #'b',Prefsfile+3
  1208. ; bne.s .noback
  1209. ; jsr mt_init
  1210. ;.noback:
  1211. ;
  1212. ; clr.b CHANNELDATA
  1213. ; clr.b CHANNELDATA+8
  1214. ; clr.b CHANNELDATA+16
  1215. ; clr.b CHANNELDATA+24
  1216. ;
  1217. ; cmp.b #'b',Prefsfile+3
  1218. ; bne.s noreserve
  1219. ;
  1220. ; st CHANNELDATA
  1221. ; st CHANNELDATA+8
  1222. ; st CHANNELDATA+16
  1223. ; st CHANNELDATA+24
  1224. ;noreserve: 
  1225.  
  1226. ; st CHANNELDATA
  1227. ; st CHANNELDATA+8
  1228.  
  1229.  move.l SampleList+6*8,pos0LEFT
  1230.  move.l SampleList+6*8+4,Samp0endLEFT
  1231.  move.l #playerheight,PLR1s_targheight
  1232.  move.l #playerheight,PLR1s_height
  1233.  move.l #playerheight,PLR2s_targheight
  1234.  move.l #playerheight,PLR2s_height
  1235.  
  1236. ; cmp.b #'n',mors
  1237. ; beq.s nohandshake
  1238. ;
  1239. ; move.b #%11011000,$bfd200
  1240. ; move.b #%00010000,$bfd000
  1241. ;waitloop:
  1242. ; btst.b #4,$bfd000
  1243. ; bne.s waitloop
  1244. ; move.b #%11000000,$bfd200
  1245.  
  1246. ;wtmouse:
  1247. ; btst #6,$bfe001
  1248. ; bne.s wtmouse
  1249.  
  1250. ;nohandshake:
  1251.  
  1252. ; jmp end
  1253.  
  1254. ; move.l COPSCRN1,drawpt
  1255. ; move.l COPSCRN2,olddrawpt
  1256.  
  1257.  jsr CLEARKEYBOARD
  1258. ; jsr MAKEBACKROUT
  1259.  
  1260.  clr.b MASTERQUITTING
  1261.  
  1262.  cmp.b #'n',mors
  1263.  seq SLAVEQUITTING
  1264.  
  1265.  move.w #127,PLR2_energy
  1266.  
  1267.  
  1268. ; move.l #ANOTHERSUP,$80
  1269. ; trap #0
  1270. ; rts
  1271. ;
  1272. ;ANOTHERSUP:
  1273.  
  1274. ; move.l $4.w,a6
  1275. ; jsr _LVOSuperState(a6)
  1276. ; move.l d0,SSTACK
  1277.  
  1278. ; CACHE_FREEZE_OFF d2
  1279.  
  1280. ; charlie
  1281. ; DATA_CACHE_ON d2
  1282.  
  1283. ; DataCacheOn
  1284.  
  1285. ; move.l $4.w,a6
  1286. ; move.l SSTACK,d0
  1287. ; jsr _LVOUserState(a6)
  1288.  
  1289.  move.l #0,hitcol
  1290.  
  1291.  cmp.b #'n',mors
  1292.  bne.s NOCLTXT
  1293.  
  1294. ; move.b #0,lastpressed
  1295. ;.wtpress
  1296. ; btst #6,$bfe001
  1297. ; beq.s CLOSETXT
  1298. ; btst #7,$bfe001
  1299. ; beq.s CLOSETXT
  1300. ; tst.b lastpressed
  1301. ; beq.s .wtpress
  1302.  
  1303. CLOSETXT:
  1304.  
  1305.  move.w #$8f8,d0
  1306.  move.w #7,d1
  1307.  
  1308. .fdup
  1309.  move.w d0,TXTCOLL
  1310.  sub.w #$121,d0
  1311. .wtframe:
  1312. ; btst #5,$dff000+intreqrl
  1313. ; beq.s .wtframe
  1314. ; move.w #$0020,$dff000+intreq
  1315.  dbra d1,.fdup
  1316.  
  1317.  move.w #0,TXTCOLL
  1318.  
  1319. NOCLTXT:
  1320.  
  1321.  
  1322.  
  1323.     move.l    4.w,a6
  1324.     jsr    _LVOForbid(a6)
  1325. ;    jsr    _LVODisable(a6)
  1326.  
  1327.  
  1328. ;    move.w    #%0111111111111111,intena+$dff000
  1329. ;    move.w    #%1000000011111111,intena+$dff000
  1330.  
  1331.  
  1332. ;charlie 
  1333. ; move.l #PALETTEBIT,$dff084
  1334. ; move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1335.  
  1336.  
  1337.  clr.b PLR1_Ducked
  1338.  clr.b PLR2_Ducked
  1339.  clr.b p1_ducked
  1340.  clr.b p2_ducked
  1341.  
  1342. ********************************************
  1343.  
  1344. ;    jmp docredits
  1345.  
  1346. ********************************************
  1347.  
  1348.  
  1349.  st doanything
  1350.  st dosounds
  1351.  
  1352.  jsr CLRNASTYMEM
  1353.  
  1354.  move.l #COMPACTMAP,a0
  1355.  move.l a0,LASTZONE
  1356.  move.w #255,d0
  1357. .clrmap
  1358.  move.l #0,(a0)+
  1359.  dbra d0,.clrmap
  1360.  
  1361.  move.l #COMPACTMAP,a0
  1362.  move.l #BIGMAP,a1
  1363.  
  1364.  bra NOALLWALLS
  1365.  
  1366.  move.l ZoneGraphAdds,a2
  1367. DOALLWALLS:
  1368.  move.l (a2),d0
  1369.  beq.s nomorezones
  1370.  move.l d0,a3
  1371.  
  1372.  addq #8,a2
  1373.  
  1374.  add.l LEVELGRAPHICS,a3
  1375.  addq #2,a3
  1376.  move.l a1,a4
  1377.  
  1378. ; DOLOWERROOM
  1379.  
  1380. innerwalls:
  1381.  move.b (a3),d1
  1382.  move.b 1(a3),d0
  1383.  bne doneinner
  1384.  
  1385.  tst.b d1
  1386.  blt noid
  1387.  
  1388.  move.b d1,d3
  1389.  and.w #15,d1
  1390.  
  1391.  moveq #0,d0
  1392.  move.w d1,d2
  1393.  add.w d1,d1
  1394.  add.w d2,d1
  1395.  addq #1,d1
  1396.  bset d1,d0
  1397.  btst #4,d3
  1398.  beq.s .nodoor
  1399.  addq #1,d1
  1400.  bset d1,d0
  1401. .nodoor
  1402.  
  1403.  or.l d0,(a0)
  1404.  
  1405.  move.w 2(a3),(a4)
  1406.  move.w 4(a3),2(a4)
  1407.  
  1408. noid:
  1409.  
  1410.  add.w #30,a3
  1411.  addq #4,a4
  1412.  
  1413.  bra innerwalls
  1414.  
  1415. doneinner:
  1416.  
  1417.  add.w #40,a1
  1418.  addq #4,a0
  1419.  
  1420.  bra DOALLWALLS
  1421. nomorezones:
  1422.  
  1423. NOALLWALLS
  1424.  
  1425.  move.w #96,MIDDLEX
  1426.  move.w #192,RIGHTX
  1427.  move.w #160,BOTTOMY
  1428.  move.w #80,TOTHEMIDDLE
  1429.  clr.b FULLSCR
  1430. **************************************
  1431.  clr.b PLR1KEYS
  1432.  clr.b PLR1PATH
  1433.  clr.b PLR1MOUSE
  1434.  st PLR1JOY
  1435.  
  1436. **************************************
  1437. lop:
  1438.  
  1439.  move.b #1,PLR1_GunSelected
  1440.  
  1441. ; btst #6,$bfe001
  1442. ;charlie bne.b .nocop
  1443.  
  1444. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1445.  
  1446. .nocop
  1447.  
  1448.  move.l #KeyMap,a5
  1449.  
  1450.  cmp.b #'n',mors
  1451.  bne .nopause
  1452.  tst.b $19(a5)
  1453.  beq.s .nopause
  1454.  clr.b doanything
  1455.  
  1456. .waitrel:
  1457.  
  1458.  tst.b PLR1JOY
  1459.  beq.s .NOJOY
  1460.  jsr _ReadJoy1
  1461. .NOJOY
  1462.  
  1463.  tst.b $19(a5)
  1464.  bne.s .waitrel
  1465.  
  1466.  bsr PAUSEOPTS
  1467.  
  1468.  
  1469.  st doanything
  1470. .nopause: 
  1471.  
  1472. ; move.l hitcol,d0
  1473. ; move.l d0,d1
  1474. ; add.l #PALETTEBIT,d1
  1475. ; move.l d1,$dff084
  1476. ; tst.l d0
  1477. ; beq.s nofadedownhc
  1478. ; sub.l #2116,d0
  1479. ; move.l d0,hitcol
  1480. nofadedownhc:
  1481.  
  1482.  st READCONTROLS
  1483.  move.l #$dff000,a6
  1484.  
  1485.  
  1486.  cmp.b #'n',mors
  1487.  beq .nopause
  1488.  
  1489.  move.b SLAVEPAUSE,d0
  1490.  or.b MASTERPAUSE,d0
  1491.  beq.s .nopause
  1492.  clr.b doanything
  1493.  
  1494.  move.l #KeyMap,a5
  1495. .waitrel:
  1496.  
  1497.  cmp.b #'s',mors
  1498.  beq.s .RE2
  1499.  tst.b PLR1JOY
  1500.  beq.s .NOJOY
  1501.  jsr _ReadJoy1
  1502.  bra .RE1
  1503. .RE2:
  1504.  tst.b PLR2JOY
  1505.  beq.s .NOJOY
  1506.  jsr _ReadJoy2
  1507. .RE1
  1508. .NOJOY:
  1509.  tst.b $19(a5)
  1510.  bne.s .waitrel
  1511.  
  1512.  bsr PAUSEOPTS
  1513.  
  1514.  cmp.b #'m',mors
  1515.  bne.s .slavelast
  1516.  Jsr SENDFIRST
  1517.  bra .masfirst
  1518. .slavelast
  1519.  Jsr RECFIRST
  1520. .masfirst:
  1521.  clr.b SLAVEPAUSE
  1522.  clr.b MASTERPAUSE
  1523.  st doanything
  1524.  
  1525. .nopause: 
  1526.  
  1527.  movem.l d0-d7/a0-a6,-(a7)
  1528.  move.w #256,COPIEDPAL
  1529.  move.w #0,COPIEDPAL+2
  1530. LOOKFORME:
  1531.  move.l MyScreen,a0
  1532.  lea sc_ViewPort(a0),a0
  1533.  move.l #COPIEDPAL,a1
  1534.  move.l _GfxBase,a6
  1535.  jsr -$372(a6)
  1536.  movem.l (a7)+,d0-d7/a0-a6
  1537.  
  1538.  move.l BMPtr,d0
  1539.  move.l BMPtr2,BMPtr
  1540.  move.l d0,BMPtr2
  1541.  
  1542.  move.l BMPtr2,a1
  1543.  addq #8,a1
  1544.  
  1545.  move.l MyScreen,a0
  1546.  lea sc_BitMap(a0),a0
  1547.  lea bm_Planes(a0),a0
  1548.  move.l (a1)+,(a0)+
  1549.  move.l (a1)+,(a0)+
  1550.  move.l (a1)+,(a0)+
  1551.  move.l (a1)+,(a0)+
  1552.  move.l (a1)+,(a0)+
  1553.  move.l (a1)+,(a0)+
  1554.  move.l (a1)+,(a0)+
  1555.  move.l (a1)+,(a0)+
  1556.  
  1557.  move.l MyScreen,a0
  1558.  move.l _IntuitionBase,a6
  1559.  jsr _LVOMakeScreen(a6)
  1560.  
  1561.  move.l _IntuitionBase,a6
  1562.  jsr _LVORethinkDisplay(a6)
  1563.  
  1564. ; move.l drawpt,d0
  1565. ; move.l olddrawpt,drawpt
  1566. ; move.l d0,olddrawpt
  1567.  
  1568.  move.l SCRNDRAWPT,d0
  1569.  move.l SCRNSHOWPT,SCRNDRAWPT
  1570.  move.l d0,SCRNSHOWPT
  1571.  
  1572. ; move.l d0,$dff084    
  1573.  move.l drawpt,a3
  1574. ; move.l COPSCRNBUFF,a3
  1575.  adda.w #10,a3
  1576.  move.l a3,frompt
  1577.  add.l #104*4*40,a3
  1578.  move.l a3,midpt
  1579.  
  1580.  cmp.b #'s',mors
  1581.  beq.s nowaitslave
  1582.  
  1583. waitfortop:
  1584. ;
  1585. ; btst.b #0,intreqrl(a6)
  1586. ; beq.b waitfortop
  1587.  
  1588. ; move.w #$1,intreq(a6)
  1589.  move.l #PLR1_GunData,GunData
  1590.  move.b PLR1_GunSelected,GunSelected
  1591.  bra waitmaster
  1592.  
  1593. nowaitslave:
  1594.  move.l #PLR2_GunData,GunData
  1595.  move.b PLR2_GunSelected,GunSelected
  1596. waitmaster:
  1597.  
  1598.  move.l #SMIDDLEY,a0
  1599.  movem.l (a0)+,d0/d1
  1600.  move.l d0,MIDDLEY
  1601.  move.l d1,MIDDLEY+4
  1602.  
  1603.  move.l waterpt,a0
  1604.  move.l (a0)+,watertouse
  1605.  cmp.l #endwaterlist,a0
  1606.  blt.s okwat
  1607.  move.l #waterlist,a0
  1608. okwat:
  1609.  move.l a0,waterpt
  1610.  
  1611.  add.w #640,wtan
  1612.  and.w #8191,wtan
  1613.  add.l #1,wateroff
  1614.  and.l #$3fff3fff,wateroff
  1615.  
  1616.  moveq #0,d0
  1617.  move.b GunSelected,d0
  1618.  move.l #PLAYERONEAMMO,a6
  1619.  move.w (a6,d0.w*2),d0
  1620.  asr.w #3,d0
  1621.  move.w d0,Ammo
  1622.  
  1623.  move.l PLR1_xoff,OLDX1
  1624.  move.l PLR1_zoff,OLDZ1
  1625.  move.l PLR2_xoff,OLDX2
  1626.  move.l PLR2_zoff,OLDZ2
  1627.  
  1628.  move.l #$dff000,a6
  1629.  
  1630.  cmp.b #'s',mors
  1631.  beq ASlaveShouldWaitOnHisMaster
  1632.  
  1633.  cmp.b #'n',mors
  1634.  bne NotOnePlayer
  1635.  
  1636.  move.w PLR1_energy,Energy
  1637.  move.w FramesToDraw,TempFrames
  1638.  cmp.w #15,TempFrames
  1639.  blt.s .okframe
  1640.  move.w #15,TempFrames
  1641. .okframe:
  1642.  move.w #0,FramesToDraw
  1643.  
  1644. *********************************************
  1645. *********** TAKE THIS OUT *******************
  1646. *********************************************
  1647.  
  1648.  move.l CHEATPTR,a4
  1649.  add.l #200000,a4
  1650.  moveq #0,d0
  1651.  move.b (a4),d0
  1652.  
  1653.  move.l #KeyMap,a5
  1654.  tst.b (a5,d0.w)
  1655.  beq.s .nocheat
  1656.  
  1657.  addq #1,a4
  1658.  cmp.l #ENDCHEAT,a4
  1659.  blt.s .nocheat
  1660.  cmp.w #0,CHEATNUM
  1661.  beq.s .nocheat
  1662.  sub.w #1,CHEATNUM
  1663.  move.l #CHEATFRAME,a4
  1664.  move.w #127,PLR1_energy
  1665.  bsr EnergyBar
  1666. .nocheat
  1667.  
  1668.  sub.l #200000,a4
  1669.  move.l a4,CHEATPTR
  1670.  
  1671. **********************************************
  1672. **********************************************
  1673. **********************************************
  1674.  
  1675.  move.l PLR1s_xoff,p1_xoff
  1676.  move.l PLR1s_zoff,p1_zoff
  1677.  move.l PLR1s_yoff,p1_yoff
  1678.  move.l PLR1s_height,p1_height
  1679.  move.w PLR1s_angpos,p1_angpos
  1680.  move.w PLR1_bobble,p1_bobble
  1681.  move.b PLR1_clicked,p1_clicked
  1682.  move.b PLR1_fire,p1_fire
  1683.  clr.b PLR1_clicked
  1684.  move.b PLR1_SPCTAP,p1_spctap
  1685.  clr.b PLR1_SPCTAP
  1686.  move.b PLR1_Ducked,p1_ducked
  1687.  move.b PLR1_GunSelected,p1_gunselected
  1688.  
  1689.  bsr PLR1_Control
  1690.  
  1691.  move.l PLR1_Roompt,a0
  1692.  move.l ToZoneRoof(a0),SplitHeight
  1693.  move.w p1_xoff,THISPLRxoff
  1694.  move.w p1_zoff,THISPLRzoff
  1695.  
  1696.  
  1697.  move.l #$60000,p2_yoff
  1698.  move.l PLR2_Obj,a0
  1699.  move.w #-1,GraphicRoom(a0)
  1700.  move.w #-1,12(a0)
  1701.  move.b #0,17(a0)
  1702.  move.l #BollocksRoom,PLR2_Roompt
  1703.  
  1704.  bra donetalking
  1705.  
  1706. NotOnePlayer:
  1707.  move.l #KeyMap,a5
  1708.  tst.b $19(a5)
  1709.  sne MASTERPAUSE
  1710.  
  1711. *********************************
  1712.  move.w PLR1_energy,Energy
  1713. ; change this back
  1714. *********************************
  1715.  
  1716.  jsr SENDFIRST
  1717.  
  1718.  move.w FramesToDraw,TempFrames
  1719.  cmp.w #15,TempFrames
  1720.  blt.s .okframe
  1721.  move.w #15,TempFrames
  1722. .okframe:
  1723.  move.w #0,FramesToDraw
  1724.  
  1725.  move.l PLR1s_xoff,p1_xoff
  1726.  move.l PLR1s_zoff,p1_zoff
  1727.  move.l PLR1s_yoff,p1_yoff
  1728.  move.l PLR1s_height,p1_height
  1729.  move.w PLR1s_angpos,p1_angpos
  1730.  move.w PLR1_bobble,p1_bobble
  1731.  move.b PLR1_clicked,p1_clicked
  1732.  clr.b PLR1_clicked
  1733.  move.b PLR1_fire,p1_fire
  1734.  move.b PLR1_SPCTAP,p1_spctap
  1735.  clr.b PLR1_SPCTAP
  1736.  move.b PLR1_Ducked,p1_ducked
  1737.  move.b PLR1_GunSelected,p1_gunselected
  1738.  
  1739.  move.l p1_xoff,d0
  1740.  jsr SENDFIRST
  1741.  move.l d0,p2_xoff
  1742.  
  1743.  move.l p1_zoff,d0
  1744.  jsr SENDFIRST
  1745.  move.l d0,p2_zoff 
  1746.  
  1747.  move.l p1_yoff,d0
  1748.  jsr SENDFIRST
  1749.  move.l d0,p2_yoff
  1750.   
  1751.  move.l p1_height,d0
  1752.  jsr SENDFIRST
  1753.  move.l d0,p2_height
  1754.  
  1755.  move.w p1_angpos,d0
  1756.  swap d0
  1757.  move.w p1_bobble,d0
  1758.  jsr SENDFIRST
  1759.  move.w d0,p2_bobble
  1760.  swap d0
  1761.  move.w d0,p2_angpos
  1762.  
  1763.  
  1764.  move.w TempFrames,d0
  1765.  swap d0
  1766.  move.b p1_spctap,d0
  1767.  lsl.w #8,d0
  1768.  move.b p1_clicked,d0
  1769.  jsr SENDFIRST
  1770.  move.b d0,p2_clicked
  1771.  lsr.w #8,d0
  1772.  move.b d0,p2_spctap
  1773.  
  1774.  
  1775.  move.w Rand1,d0
  1776.  swap d0
  1777.  move.b p1_ducked,d0
  1778.  lsl.w #8,d0
  1779.  move.b p1_gunselected,d0
  1780.  jsr SENDFIRST
  1781.  move.b d0,p2_gunselected
  1782.  lsr.w #8,d0
  1783.  move.b d0,p2_ducked
  1784.  
  1785.  move.b p1_fire,d0
  1786.  lsl.w #8,d0
  1787.  move.b MASTERQUITTING,d0
  1788.  or.b d0,SLAVEQUITTING
  1789.  swap d0
  1790.  move.b MASTERPAUSE,d0
  1791.  or.b d0,SLAVEPAUSE
  1792.  jsr SENDFIRST
  1793.  or.b d0,MASTERPAUSE
  1794.  or.b d0,SLAVEPAUSE
  1795.  swap d0
  1796.  or.b d0,SLAVEQUITTING
  1797.  or.b d0,MASTERQUITTING
  1798.  lsr.w #8,d0
  1799.  move.b d0,p2_fire
  1800.  
  1801.  bsr PLR1_Control
  1802.  bsr PLR2_Control
  1803.  move.l PLR1_Roompt,a0
  1804.  move.l ToZoneRoof(a0),SplitHeight
  1805.  move.w p1_xoff,THISPLRxoff
  1806.  move.w p1_zoff,THISPLRzoff
  1807.  
  1808.  bra donetalking
  1809.  
  1810. ASlaveShouldWaitOnHisMaster:
  1811.  
  1812.  move.l #KeyMap,a5
  1813.  tst.b $19(a5)
  1814.  sne SLAVEPAUSE
  1815.  
  1816.  
  1817.  move.w PLR2_energy,Energy
  1818.  
  1819.  jsr RECFIRST
  1820.  
  1821.  move.l PLR2s_xoff,p2_xoff
  1822.  move.l PLR2s_zoff,p2_zoff
  1823.  move.l PLR2s_yoff,p2_yoff
  1824.  move.l PLR2s_height,p2_height
  1825.  move.w PLR2s_angpos,p2_angpos
  1826.  move.w PLR2_bobble,p2_bobble
  1827.  move.b PLR2_clicked,p2_clicked
  1828.  clr.b PLR2_clicked
  1829.  move.b PLR2_fire,p2_fire
  1830.  move.b PLR2_SPCTAP,p2_spctap
  1831.  clr.b PLR2_SPCTAP
  1832.  move.b PLR2_Ducked,p2_ducked
  1833.  move.b PLR2_GunSelected,p2_gunselected
  1834.  
  1835.  move.l p2_xoff,d0
  1836.  jsr RECFIRST
  1837.  move.l d0,p1_xoff
  1838.  
  1839.  move.l p2_zoff,d0
  1840.  jsr RECFIRST
  1841.  move.l d0,p1_zoff
  1842.  
  1843.  move.l p2_yoff,d0
  1844.  jsr RECFIRST
  1845.  move.l d0,p1_yoff
  1846.  
  1847.  move.l p2_height,d0
  1848.  jsr RECFIRST
  1849.  move.l d0,p1_height
  1850.  
  1851.  move.w p2_angpos,d0
  1852.  swap d0
  1853.  move.w p2_bobble,d0
  1854.  jsr RECFIRST
  1855.  move.w d0,p1_bobble
  1856.  swap d0
  1857.  move.w d0,p1_angpos
  1858.  
  1859.  
  1860.  move.b p2_spctap,d0
  1861.  lsl.w #8,d0
  1862.  move.b p2_clicked,d0
  1863.  jsr RECFIRST
  1864.  move.b d0,p1_clicked
  1865.  lsr.w #8,d0
  1866.  move.b d0,p1_spctap
  1867.  swap d0
  1868.  move.w d0,TempFrames
  1869.  
  1870.  
  1871.  move.b p2_ducked,d0
  1872.  lsl.w #8,d0
  1873.  move.b p2_gunselected,d0
  1874.  jsr RECFIRST
  1875.  move.b d0,p1_gunselected
  1876.  lsr.w #8,d0
  1877.  move.b d0,p1_ducked
  1878.  swap d0
  1879.  move.w d0,Rand1
  1880.  
  1881.  move.b p2_fire,d0
  1882.  lsl.w #8,d0
  1883.  move.b SLAVEQUITTING,d0
  1884.  or.b d0,MASTERQUITTING
  1885.  swap d0
  1886.  move.b SLAVEPAUSE,d0
  1887.  or.b d0,MASTERPAUSE
  1888.  jsr RECFIRST
  1889.  or.b d0,MASTERPAUSE
  1890.  or.b d0,SLAVEPAUSE
  1891.  swap d0
  1892.  or.b d0,SLAVEQUITTING
  1893.  or.b d0,MASTERQUITTING
  1894.  lsr.w #8,d0
  1895.  move.b d0,p1_fire
  1896.  
  1897.  
  1898.  bsr PLR1_Control
  1899.  bsr PLR2_Control
  1900.  move.w p2_xoff,THISPLRxoff
  1901.  move.w p2_zoff,THISPLRzoff
  1902.  move.l PLR2_Roompt,a0
  1903.  move.l ToZoneRoof(a0),SplitHeight
  1904.  
  1905. donetalking:
  1906.  
  1907.  
  1908.  
  1909.  move.l #ZoneBrightTable,a1
  1910.  move.l ZoneAdds,a2
  1911.  move.l PLR2_ListOfGraphRooms,a0
  1912. ; move.l PLR2_PointsToRotatePtr,a5
  1913.  move.l a0,a5
  1914.  cmp.b #'s',mors
  1915.  beq.s doallz
  1916.  move.l PLR1_ListOfGraphRooms,a0
  1917. ; move.l PLR1_PointsToRotatePtr,a5
  1918.  move.l a0,a5 
  1919. doallz
  1920.  move.w (a0),d0
  1921.  blt.s doneallz
  1922.  add.w #8,a0
  1923.  
  1924.  move.l (a2,d0.w*4),a3
  1925.  add.l LEVELDATA,a3
  1926.  move.w ToZoneBrightness(a3),d2
  1927.  
  1928.  blt.s justbright
  1929.  move.w d2,d3
  1930.  lsr.w #8,d3
  1931.  tst.b d3
  1932.  beq.s justbright
  1933.  
  1934.  move.l #BrightAnimTable,a4
  1935.  move.w -2(a4,d3.w*2),d2
  1936.  
  1937. justbright:
  1938.  muls #32,d2
  1939.  divs #20,d2
  1940.  move.w d2,(a1,d0.w*4)
  1941.  
  1942.  move.w ToUpperBrightness(a3),d2
  1943.  
  1944.  blt.s justbright2
  1945.  move.w d2,d3
  1946.  lsr.w #8,d3
  1947.  tst.b d3
  1948.  beq.s justbright2
  1949.  
  1950.  move.l #BrightAnimTable,a4
  1951.  move.w -2(a4,d3.w*2),d2
  1952.  
  1953. justbright2:
  1954.  
  1955.  muls #32,d2
  1956.  divs #20,d2
  1957.  move.w d2,2(a1,d0.w*4)
  1958.  
  1959.  bra doallz
  1960.  
  1961. doneallz:
  1962.  
  1963.  move.l PointBrights,a2
  1964.  move.l #CurrentPointBrights,a3
  1965. justtheone:
  1966.  move.w (a5),d0
  1967.  blt whythehell
  1968.  addq #8,a5
  1969.  
  1970.  muls #40,d0
  1971.  
  1972.  move.w #39,d7
  1973.  
  1974. allinzone:
  1975.  move.w (a2,d0.w*2),d2
  1976.  
  1977.  tst.b d2
  1978.  blt.s .justbright
  1979.  move.w d2,d3
  1980.  lsr.w #8,d3
  1981.  tst.b d3
  1982.  beq.s .justbright
  1983.  
  1984.  move.w d3,d4
  1985.  and.w #$f,d3
  1986.  lsr.w #4,d4
  1987.  add.w #1,d4
  1988.  move.l #BrightAnimTable,a0
  1989.  move.w -2(a0,d3.w*2),d3
  1990.  ext.w d2
  1991.  sub.w d2,d3
  1992.  muls d4,d3
  1993.  asr.w #4,d3
  1994.  add.w d3,d2
  1995.  
  1996. .justbright:
  1997.  ext.w d2
  1998.  
  1999.  muls #31,d2
  2000.  divs #20,d2
  2001.  
  2002.  move.w d2,(a3,d0.w*2)
  2003.  addq #1,d0
  2004.  dbra d7,allinzone
  2005.  
  2006.  bra justtheone
  2007.  
  2008. whythehell:
  2009.  
  2010.  cmp.b #'n',mors
  2011.  beq nosee
  2012.  
  2013.  move.l PLR1_Roompt,FromRoom
  2014.  move.l PLR2_Roompt,ToRoom
  2015.  move.w p1_xoff,Viewerx
  2016.  move.w p1_zoff,Viewerz
  2017.  move.l p1_yoff,d0
  2018.  asr.l #7,d0
  2019.  move.w d0,Viewery
  2020.  move.w p2_xoff,Targetx
  2021.  move.w p2_zoff,Targetz
  2022.  move.l p2_yoff,d0
  2023.  asr.l #7,d0
  2024.  move.w d0,Targety
  2025.  move.b PLR1_StoodInTop,ViewerTop
  2026.  move.b PLR2_StoodInTop,TargetTop
  2027.  jsr CanItBeSeen
  2028.  
  2029.  move.l PLR1_Obj,a0
  2030.  move.b CanSee,d0
  2031.  and.b #2,d0
  2032.  move.b d0,17(a0)
  2033.  move.l PLR2_Obj,a0
  2034.  move.b CanSee,d0
  2035.  and.b #1,d0
  2036.  move.b d0,17(a0)
  2037.  
  2038. nosee:
  2039.  
  2040.  move.l PLR1_Obj,a0
  2041.  move.b #5,16(a0)
  2042.  move.l PLR2_Obj,a0
  2043.  move.b #11,16(a0)
  2044.  
  2045.  move.w TempFrames,d0
  2046.  add.w d0,p1_holddown
  2047.  cmp.w #30,p1_holddown
  2048.  blt.s oklength
  2049.  move.w #30,p1_holddown
  2050. oklength:
  2051.  
  2052.  tst.b p1_fire
  2053.  bne.s okstillheld
  2054.  sub.w d0,p1_holddown
  2055.  bge.s okstillheld
  2056.  move.w #0,p1_holddown
  2057.  
  2058. okstillheld:
  2059.  
  2060.  move.w TempFrames,d0
  2061.  add.w d0,p2_holddown
  2062.  
  2063.  cmp.w #30,p2_holddown
  2064.  blt.s oklength2
  2065.  move.w #30,p2_holddown
  2066. oklength2:
  2067.  
  2068.  
  2069.  tst.b p2_fire
  2070.  bne.s okstillheld2
  2071.  sub.w d0,p2_holddown
  2072.  bge.s okstillheld2
  2073.  move.w #0,p2_holddown
  2074. okstillheld2:
  2075.  
  2076. ***** CHECKING LIGHT *********
  2077.  
  2078. ; move.w #-20,d0
  2079. ; move.w PLR1_xoff,d1
  2080. ; move.w PLR1_zoff,d2
  2081. ; move.l PLR1_Roompt,a0
  2082. ; move.w (a0),d3
  2083. ; move.w PLR1_angpos,d4
  2084. ;
  2085. ; jsr BRIGHTENPOINTSANGLE
  2086.  
  2087. ******************************
  2088.  
  2089. ; move.l #PLR1_GunData,a1
  2090. ; move.w p1_holddown,d0
  2091. ; move.w #50,10+32*3(a1)
  2092. ; move.l #PLR2_GunData,a1
  2093. ; move.w p2_holddown,d0
  2094. ; move.w #50,10+32*3(a1)
  2095.  
  2096. ******************************************
  2097. ******************************************
  2098.  
  2099.  move.w TempFrames,d1
  2100.  bgt.s noze
  2101.  moveq #1,d1
  2102. noze:
  2103.  
  2104.  move.w PLR1_xoff,d0
  2105.  sub.w OLDX1,d0
  2106.  asl.w #4,d0
  2107.  ext.l d0
  2108.  divs d1,d0
  2109.  move.w d0,XDIFF1
  2110.  move.w PLR2_xoff,d0
  2111.  sub.w OLDX2,d0
  2112.  asl.w #4,d0
  2113.  ext.l d0
  2114.  divs d1,d0
  2115.  move.w d0,XDIFF2
  2116.  move.w PLR1_zoff,d0
  2117.  sub.w OLDZ1,d0
  2118.  asl.w #4,d0
  2119.  ext.l d0
  2120.  divs d1,d0
  2121.  move.w d0,ZDIFF1
  2122.  move.w PLR2_zoff,d0
  2123.  sub.w OLDZ2,d0
  2124.  asl.w #4,d0
  2125.  ext.l d0
  2126.  divs d1,d0
  2127.  move.w d0,ZDIFF2
  2128.  
  2129.  cmp.b #'s',mors
  2130.  beq.s ImPlayer2OhYesIAm
  2131.  bsr USEPLR1
  2132.  bra IWasPlayer1
  2133.  
  2134. ImPlayer2OhYesIAm:
  2135.  bsr USEPLR2
  2136. IWasPlayer1:
  2137.  
  2138.  
  2139.  cmp.b #'s',mors
  2140.  beq drawplayer2
  2141.  
  2142.  move.w #0,scaleval
  2143.  
  2144.  move.l PLR1_xoff,xoff
  2145.  move.l PLR1_yoff,yoff
  2146.  move.l PLR1_zoff,zoff
  2147.  move.w PLR1_angpos,angpos
  2148.  move.w PLR1_cosval,cosval
  2149.  move.w PLR1_sinval,sinval
  2150.  
  2151.  
  2152.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2153.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2154.  move.l PLR1_Roompt,Roompt
  2155.  
  2156.  bsr OrderZones
  2157.  jsr objmoveanim
  2158.  bsr EnergyBar
  2159.  bsr AmmoBar
  2160.  
  2161. ;********************************************
  2162. ;************* Do reflection ****************
  2163. ;
  2164. ; move.l ListOfGraphRooms,a0
  2165. ; move.l ZoneAdds,a1
  2166. ;checkwaterheights
  2167. ; move.w (a0),d0
  2168. ; blt allzonesdone
  2169. ; addq #8,a0
  2170. ; move.l (a1,d0.w*4),a2
  2171. ; add.l LEVELDATA,a2
  2172. ; move.l ToZoneWater(a2),d0
  2173. ; cmp.l ToZoneFloor(a2),d0
  2174. ; blt.s WEHAVEAHEIGHT
  2175. ; bra.s checkwaterheights
  2176. ;
  2177. ;WEHAVEAHEIGHT:
  2178. ;
  2179. ; sub.l yoff,d0
  2180. ; blt.s underwater
  2181. ; add.l d0,d0
  2182. ; add.l d0,yoff
  2183. ; move.l FASTBUFFER2,FASTBUFFER
  2184. ; move.w #0,leftclip
  2185. ; move.w RIGHTX,rightclip
  2186. ; move.w #0,deftopclip
  2187. ; move.w #BOTTOMY/2,defbotclip
  2188. ; move.w #0,topclip
  2189. ; move.w #BOTTOMY/2,botclip
  2190. ;
  2191. ; clr.b DOANYWATER 
  2192. ; bsr DrawDisplay
  2193. ;allzonesdone:
  2194. ;underwater:
  2195.  
  2196. ********************************************
  2197.  
  2198.  st DOANYWATER
  2199.  
  2200.  move.l PLR1_yoff,yoff
  2201.  
  2202.  move.w #0,leftclip
  2203.  move.w RIGHTX,rightclip
  2204.  move.w #0,deftopclip
  2205.  
  2206.  move.w BOTTOMY,defbotclip
  2207.  move.w #0,topclip
  2208.  move.w BOTTOMY,botclip
  2209. ; sub.l #10*104*4,frompt
  2210. ; sub.l #10*104*4,midpt
  2211.  
  2212. * Subroom loop
  2213.  
  2214.  bsr DrawDisplay 
  2215.  
  2216.  bra nodrawp2
  2217.  
  2218. drawplayer2
  2219.  
  2220.  move.w #0,scaleval
  2221.  move.l PLR2_xoff,xoff
  2222.  move.l PLR2_yoff,yoff
  2223.  move.l PLR2_zoff,zoff
  2224.  move.w PLR2_angpos,angpos
  2225.  move.w PLR2_cosval,cosval
  2226.  move.w PLR2_sinval,sinval 
  2227.  
  2228.  
  2229.  
  2230.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2231.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2232.  move.l PLR2_Roompt,Roompt
  2233.  
  2234.  bsr OrderZones
  2235.  jsr objmoveanim
  2236.  bsr EnergyBar
  2237.  bsr AmmoBar
  2238.  
  2239.  move.w #0,leftclip
  2240.  move.w RIGHTX,rightclip
  2241.  move.w #0,deftopclip
  2242.  move.w BOTTOMY,defbotclip
  2243.  move.w #0,topclip
  2244.  move.w BOTTOMY,botclip
  2245.  
  2246.  bsr DrawDisplay
  2247.  
  2248. nodrawp2:
  2249.  
  2250. ***************************************** 
  2251. * Copy from copbuff to chip ram
  2252.  
  2253.  
  2254. ; move.l drawpt,a3
  2255. ; adda.w #10,a3
  2256. ; move.l COPSCRNBUFF,a2
  2257. ; move.w #2,d6
  2258. ; adda.w #10,a2
  2259. ;COPYOUT
  2260. ; move.w #31,d0
  2261. ;COPYDOWN1:
  2262. ; move.w #3,d1
  2263. ; move.l a2,a4
  2264. ; move.l a3,a5
  2265. ;.inlop1:
  2266. ;val SET 0
  2267. ; REPT 20
  2268. ; move.w val(a4),val(a5)
  2269. ;val SET val+104*4
  2270. ; ENDR
  2271. ; adda.l #104*4*20,a4
  2272. ; adda.l #104*4*20,a5
  2273. ; dbra d1,.inlop1
  2274. ; addq #4,a2
  2275. ; addq #4,a3
  2276. ; dbra d0,COPYDOWN1
  2277. ; addq #4,a2
  2278. ; addq #4,a3
  2279. ; dbra d6,COPYOUT 
  2280.  
  2281.  tst.b MAPON
  2282.  beq.s .nomap
  2283.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2284. .nomap
  2285.  
  2286.  move.w #0,d7
  2287.  
  2288.  tst.b FULLSCR
  2289.  beq nobigconv
  2290.  
  2291.  move.l FASTBUFFER,a0
  2292. ; add.l #320*2*20,a0
  2293.  move.w d7,d6
  2294.  muls #320,d6
  2295.  add.l d6,a0
  2296.  move.l SCRNDRAWPT,a1
  2297.  move.w d7,d6
  2298.  muls #40,d6
  2299.  add.l d6,a1
  2300. ; add.l #2+40*20,a1
  2301.  move.l #(288/8)-1,d0
  2302.  move.l #239,d1
  2303.  sub.w d7,d1
  2304.  sub.w d7,d1
  2305.  move.w #(320-288),d2
  2306.  move.w #4,d3
  2307.  
  2308.  bra donebigconv
  2309.  
  2310. nobigconv:
  2311.  
  2312.  
  2313.  move.l FASTBUFFER,a0
  2314.  move.w d7,d6
  2315.  muls #320,d6
  2316.  add.l d6,a0
  2317.  move.l SCRNDRAWPT,a1
  2318.  add.l #8+40*20,a1
  2319.  move.w d7,d6
  2320.  muls #40,d6
  2321.  add.l d6,a1
  2322.  move.l #(192/8)-1,d0
  2323.  move.l #159,d1
  2324.  sub.w d7,d1
  2325.  sub.w d7,d1
  2326.  move.w #(320-192),d2
  2327.  move.w #16,d3
  2328. donebigconv
  2329.  jsr CHUNKYTOPLANAR 
  2330.  
  2331.  
  2332.  move.l #KeyMap,a5
  2333.  tst.b (a5)
  2334.  beq.s .nosavescrn
  2335.  
  2336. ; not.b USEDOUG
  2337.  
  2338.  jsr SAVETHESCREEN
  2339.  
  2340. .nosavescrn:
  2341.  
  2342. ***************************************** 
  2343.  move.l PLR2_Roompt,a0
  2344.  move.l #WorkSpace,a1
  2345.  clr.l (a1)
  2346.  clr.l 4(a1)
  2347.  clr.l 8(a1)
  2348.  clr.l 12(a1)
  2349.  clr.l 16(a1)
  2350.  clr.l 20(a1)
  2351.  clr.l 24(a1)
  2352.  clr.l 28(a1)
  2353.  
  2354.  cmp.b #'n',mors
  2355.  beq.s plr1only
  2356.  
  2357.  lea ToListOfGraph(a0),a0
  2358. .doallrooms:
  2359.  move.w (a0),d0
  2360.  blt.s .allroomsdone
  2361.  addq #8,a0
  2362.  move.w d0,d1
  2363.  asr.w #3,d0
  2364.  bset d1,(a1,d0.w)
  2365.  bra .doallrooms
  2366. .allroomsdone:
  2367.  
  2368. plr1only:
  2369.  
  2370.  move.l PLR1_Roompt,a0
  2371.  lea ToListOfGraph(a0),a0
  2372. .doallrooms2:
  2373.  move.w (a0),d0
  2374.  blt.s .allroomsdone2
  2375.  addq #8,a0
  2376.  move.w d0,d1
  2377.  asr.w #3,d0
  2378.  bset d1,(a1,d0.w)
  2379.  bra .doallrooms2
  2380. .allroomsdone2:
  2381.  
  2382.  move.l #%000001,d7
  2383.  lea TEAMWORK,a2
  2384.  move.l ObjectData,a0
  2385.  sub.w #64,a0
  2386. .doallobs:
  2387.  add.w #64,a0
  2388.  move.w (a0),d0
  2389.  blt.s .allobsdone
  2390.  move.w 12(a0),d0
  2391.  blt.s .doallobs
  2392.  move.w d0,d1
  2393.  asr.w #3,d0
  2394.  btst d1,(a1,d0.w)
  2395.  bne.s .worryobj
  2396.  move.b 16(a0),d0
  2397.  btst d0,d7
  2398.  beq.s .doallobs
  2399.  moveq #0,d0
  2400.  move.b teamnumber(a0),d0
  2401.  blt.s .doallobs
  2402.  asl.w #4,d0
  2403.  tst.w SEENBY(a2,d0.w)
  2404.  blt.s .doallobs
  2405. .worryobj:
  2406.  or.b #127,worry(a0)
  2407.  bra.s .doallobs
  2408. .allobsdone:
  2409.  
  2410.  
  2411.  
  2412. ; move.l #brightentab,a0
  2413. ; move.l frompt,a3
  2414. ; adda.w #(4*33)+(104*4*20),a3
  2415. ; move.w #20,d7
  2416. ; move.w #20,d6
  2417. ;horl:
  2418. ; move.w d6,d5
  2419. ; move.l a3,a1
  2420. ;vertl
  2421. ; move.w (a1),d0
  2422. ; move.w (a0,d0.w*2),(a1)
  2423. ; addq #4,a1
  2424. ; dbra d5,vertl
  2425. ; adda.w #104*4,a3
  2426. ; dbra d7,horl
  2427.  
  2428.  move.l #$dff000,a6
  2429.  
  2430. ; move.w #$300,col0(a6)
  2431.  
  2432.  move.l #KeyMap,a5
  2433.  tst.b $45(a5)
  2434.  beq.s noend
  2435.  
  2436.  cmp.b #'s',mors
  2437.  beq plr2quit 
  2438.  
  2439.  st MASTERQUITTING
  2440.  bra noend
  2441.  
  2442. plr2quit:
  2443.  st SLAVEQUITTING
  2444. noend:
  2445.  
  2446.  tst.b MASTERQUITTING
  2447.  beq.s .noquit
  2448.  tst.b SLAVEQUITTING
  2449.  bne endnomusic
  2450. .noquit
  2451.  
  2452.  cmp.b #'n',mors
  2453.  bne.s noexit
  2454.  move.l PLR1_Roompt,a0
  2455.  move.w (a0),d0
  2456.  move.w PLOPT,d1
  2457.  move.l #ENDZONES,a0
  2458.  cmp.w (a0,d1.w*2),d0
  2459.  
  2460. ; change this for quick exit, charlie
  2461. zzzz:
  2462. ; bra end
  2463.  
  2464.  beq end
  2465. noexit:
  2466.  
  2467.  tst.w PLR1_energy
  2468.  ble end
  2469.  tst.w PLR2_energy
  2470.  ble end
  2471.  
  2472. ; move.l SwitchData,a0
  2473. ; tst.b 24+8(a0)
  2474. ; bne end
  2475.   
  2476. ; JSR STOPTIMER
  2477.  
  2478.  
  2479.  bra lop
  2480.  
  2481. TRRANS: dc.w 0
  2482. DOANYWATER: dc.w 0
  2483.  
  2484. DoTheMapWotNastyCharlesIsForcingMeToDo:
  2485.  
  2486.  move.l #SHADINGTABLE,a4
  2487. ; add.w MAPBRIGHT,a4
  2488.  
  2489.  move.l #KeyMap,a5
  2490.  tst.b $50(a5)
  2491.  beq.s .nobrighter
  2492.  tst.w MAPBRIGHT
  2493.  beq.s .nobrighter
  2494.  
  2495.  sub.w #1,MAPBRIGHT
  2496.  
  2497. .nobrighter:
  2498.  
  2499.  tst.b $51(a5)
  2500.  beq.s .nodimmer
  2501.  cmp.w #7,MAPBRIGHT
  2502.  bge.s .nodimmer
  2503.  
  2504.  add.w #1,MAPBRIGHT
  2505.  
  2506. .nodimmer:
  2507.  
  2508.  move.l #Rotated,a1
  2509.  move.l #COMPACTMAP,a2
  2510.  move.l #BIGMAP-40,a3
  2511.  
  2512. preshow:
  2513.  add.w #40,a3
  2514.  
  2515. SHOWMAP:
  2516.  move.l (a2)+,d5
  2517.  move.l a2,d7
  2518.  cmp.l LASTZONE,d7
  2519.  bgt shownmap
  2520.  
  2521.  tst.l d5
  2522.  beq.s preshow
  2523.  
  2524.  move.w #9,d7
  2525. wallsofzone
  2526.  
  2527.  asr.l #1,d5
  2528.  bcs.s WALLSEEN
  2529.  
  2530.  asr.l #1,d5
  2531.  bcs.s WALLMAPPED
  2532.  
  2533.  asr.l #1,d5
  2534.  addq #4,a3
  2535.  bra.s DECIDEDWALL
  2536.  
  2537. WALLMAPPED:
  2538.  move.w #$b00,d4
  2539.  asr.l #1,d5
  2540.  bcc.s .notadoor
  2541.  move.w #$e00,d4
  2542. .notadoor
  2543.  
  2544.  st TRRANS
  2545.  
  2546.  bra.s DECIDEDCOLOUR
  2547.  
  2548. WALLSEEN:
  2549.  
  2550.  clr.b TRRANS
  2551.  
  2552.  move.w #255*256,d4
  2553.  asr.l #2,d5
  2554.  bcc.s .notadoor
  2555.  move.w #254*256,d4
  2556. .notadoor
  2557. DECIDEDCOLOUR:
  2558.  move.w (a3)+,d6
  2559.  move.l (a1,d6.w*8),d0
  2560.  asr.l #7,d0
  2561.  add.w mapxoff,d0
  2562.  move.w 6(a1,d6.w*8),d1
  2563.  add.w mapzoff,d1
  2564.  move.w (a3)+,d6
  2565.  move.l (a1,d6.w*8),d2
  2566.  asr.l #7,d2
  2567.  add.w mapxoff,d2
  2568.  move.w 6(a1,d6.w*8),d3
  2569.  add.w mapzoff,d3
  2570.  
  2571.  neg.w d1
  2572.  neg.w d3
  2573.  
  2574.  movem.l d7/d5,-(a7)
  2575.  bsr CLIPANDDRAW
  2576.  movem.l (a7)+,d7/d5
  2577.  
  2578. DECIDEDWALL:
  2579.  
  2580.  dbra d7,wallsofzone
  2581.  bra SHOWMAP
  2582.  
  2583. shownmap:
  2584.  
  2585.  clr.b TRRANS
  2586.  
  2587.  move.w mapxoff,d0
  2588.  move.w mapzoff,d1
  2589.  neg.w d1
  2590.  move.w d0,d2
  2591.  move.w d1,d3
  2592.  sub.w #128,d1
  2593.  add.w #128,d3
  2594.  move.w #250*256,d4
  2595.  bsr CLIPANDDRAW
  2596.  
  2597.  move.w mapxoff,d0
  2598.  move.w mapzoff,d1
  2599.  neg.w d1
  2600.  move.w d0,d2
  2601.  move.w d1,d3
  2602.  sub.w #128,d1
  2603.  sub.w #32,d3
  2604.  sub.w #64,d2
  2605.  move.w #250*256,d4
  2606.  bsr CLIPANDDRAW
  2607.  
  2608.  move.w mapxoff,d0
  2609.  move.w mapzoff,d1
  2610.  neg.w d1
  2611.  move.w d0,d2
  2612.  move.w d1,d3
  2613.  sub.w #128,d1
  2614.  sub.w #32,d3
  2615.  add.w #64,d2
  2616.  move.w #250*256,d4
  2617.  bsr CLIPANDDRAW
  2618.  rts
  2619.  
  2620.  
  2621. CLIPANDDRAW:
  2622.  
  2623.  tst.b FULLSCR
  2624.  beq.s .nodov
  2625.  
  2626.  add.w d0,d0
  2627.  add.w d2,d2
  2628.  ext.l d0
  2629.  ext.l d2
  2630.  divs #3,d0
  2631.  divs #3,d2
  2632.  
  2633. .nodov:
  2634.  
  2635.  move.w MAPBRIGHT,d5
  2636.  asr.w d5,d0
  2637.  asr.w d5,d1
  2638.  asr.w d5,d2
  2639.  asr.w d5,d3
  2640.  
  2641. NOSCALING:
  2642.  add.w #96,d0
  2643.  bge p1xpos
  2644.  
  2645.  add.w #96,d2
  2646.  blt OFFSCREEN
  2647.  
  2648. x1nx2p:
  2649.  
  2650.  move.w d3,d5
  2651.  sub.w d1,d5
  2652.  move.w d2,d6
  2653.  sub.w d0,d6
  2654.  beq OFFSCREEN
  2655.  
  2656.  muls d0,d5
  2657.  divs d6,d5
  2658.  sub.w d5,d1
  2659.  move.w #0,d0
  2660.  
  2661.  bra doneleftclip
  2662.  
  2663. p1xpos:
  2664.  
  2665.  add.w #96,d2
  2666.  bge doneleftclip
  2667.  
  2668.  move.w d1,d5
  2669.  sub.w d3,d5
  2670.  move.w d0,d6
  2671.  sub.w d2,d6
  2672.  beq OFFSCREEN
  2673.  
  2674.  muls d2,d5
  2675.  divs d6,d5
  2676.  sub.w d5,d3
  2677.  move.w #0,d2
  2678.  
  2679. doneleftclip:
  2680.  
  2681.  cmp.w #191,d0
  2682.  ble p1xneg
  2683.  
  2684.  cmp.w #191,d2
  2685.  bgt OFFSCREEN
  2686.  
  2687.  move.w d0,d6
  2688.  sub.w d2,d6
  2689.  beq OFFSCREEN
  2690.  sub.w #191,d0
  2691.  move.w d3,d5
  2692.  sub.w d1,d5
  2693.  
  2694.  muls d5,d0
  2695.  divs d6,d0
  2696.  add.w d0,d1
  2697.  move.w #191,d0
  2698.  
  2699.  bra donerightclip
  2700.  
  2701. p1xneg:
  2702.  
  2703.  cmp.w #191,d2
  2704.  ble donerightclip
  2705.  
  2706.  move.w d2,d6
  2707.  sub.w d0,d6
  2708.  beq OFFSCREEN
  2709.  sub.w #191,d2
  2710.  move.w d1,d5
  2711.  sub.w d3,d5
  2712.  
  2713.  muls d5,d2
  2714.  divs d6,d2
  2715.  add.w d2,d3
  2716.  move.w #191,d2
  2717.  
  2718. donerightclip:
  2719.  
  2720. *********************************
  2721.  
  2722.  add.w #80,d1
  2723.  bge p1ypos
  2724.  
  2725.  add.w #80,d3
  2726.  blt OFFSCREEN
  2727.  
  2728.  move.w d2,d5
  2729.  sub.w d0,d5
  2730.  move.w d3,d6
  2731.  sub.w d1,d6
  2732.  beq OFFSCREEN
  2733.  
  2734.  muls d1,d5
  2735.  divs d6,d5
  2736.  sub.w d5,d0
  2737.  move.w #0,d1
  2738.  
  2739.  bra donetopclip
  2740.  
  2741. p1ypos:
  2742.  
  2743.  add.w #80,d3
  2744.  bge donetopclip
  2745.  
  2746.  move.w d0,d5
  2747.  sub.w d2,d5
  2748.  move.w d1,d6
  2749.  sub.w d3,d6
  2750.  beq OFFSCREEN
  2751.  
  2752.  muls d3,d5
  2753.  divs d6,d5
  2754.  sub.w d5,d2
  2755.  move.w #0,d3
  2756.  
  2757. donetopclip:
  2758.  
  2759.  cmp.w #159,d1
  2760.  ble p1yneg
  2761.  
  2762.  cmp.w #159,d3
  2763.  bgt OFFSCREEN
  2764.  
  2765.  move.w d1,d6
  2766.  sub.w d3,d6
  2767.  beq OFFSCREEN
  2768.  sub.w #159,d1
  2769.  move.w d2,d5
  2770.  sub.w d0,d5
  2771.  
  2772.  muls d5,d1
  2773.  divs d6,d1
  2774.  add.w d1,d0
  2775.  move.w #159,d1
  2776.  
  2777.  bra donebotclip
  2778.  
  2779. p1yneg:
  2780.  
  2781.  cmp.w #159,d3
  2782.  ble donebotclip
  2783.  
  2784.  move.w d3,d6
  2785.  sub.w d1,d6
  2786.  beq OFFSCREEN
  2787.  sub.w #159,d3
  2788.  move.w d0,d5
  2789.  sub.w d2,d5
  2790.  
  2791.  muls d5,d3
  2792.  divs d6,d3
  2793.  add.w d3,d2
  2794.  move.w #159,d3
  2795.  
  2796. donebotclip:
  2797.  
  2798.  tst.b TRRANS
  2799.  bne DRAWAtransLINE
  2800.  bra DRAWAMAPLINE
  2801.  
  2802. OFFSCREEN:
  2803. NOLINEtrans:
  2804.  rts
  2805.  
  2806. MAPBRIGHT:
  2807.  dc.w 0
  2808. mapxoff: dc.w 0
  2809. mapzoff: dc.w 0
  2810.  
  2811. DRAWAtransLINE:
  2812.  
  2813.  move.l FASTBUFFER,a0    ; screen to render to.
  2814.  
  2815.  tst.b FULLSCR
  2816.  beq.s .nooffset
  2817.   
  2818.  add.l #(640*40)+(48*2),a0
  2819.   
  2820. .nooffset:
  2821.  
  2822.  cmp.w d1,d3
  2823.  bgt.s .okdown
  2824.  bne.s .aline
  2825.  cmp.w d0,d2
  2826.  beq.s NOLINEtrans 
  2827. .aline
  2828.  exg d0,d2
  2829.  exg d1,d3
  2830. .okdown
  2831.  
  2832.  move.w d1,d5
  2833.  muls #320*2,d5
  2834.  add.l d5,a0
  2835.  lea (a0,d0.w*2),a0
  2836.  
  2837.  sub.w d1,d3
  2838.  
  2839.  sub.w d0,d2
  2840.  bge.s downrighttrans
  2841.  
  2842. downlefttrans:
  2843.  neg.w d2
  2844.  cmp.w d2,d3
  2845.  bgt.s downmorelefttrans
  2846.  
  2847. downleftmoretrans:
  2848.  move.w #320*2,d6
  2849.  move.w d2,d0
  2850.  move.w d2,d7
  2851.  
  2852. .linelop:
  2853.  move.b (a0),d4
  2854.  move.w (a4,d4.w*2),(a0)
  2855.  subq #2,a0
  2856.  sub.w d3,d0
  2857.  bgt.s .noextra
  2858.  add.w d2,d0
  2859.  add.w d6,a0
  2860. .noextra:
  2861.  dbra d7,.linelop
  2862.  rts
  2863.  
  2864. downmorelefttrans:
  2865.  move.w #320*2,d6
  2866.  move.w d3,d0
  2867.  move.w d3,d7
  2868.  
  2869. .linelop:
  2870.  move.b (a0),d4
  2871.  move.w (a4,d4.w*2),(a0)
  2872.  add.w d6,a0
  2873.  sub.w d2,d0
  2874.  bgt.s .noextra
  2875.  add.w d3,d0
  2876.  subq #2,a0
  2877. .noextra:
  2878.  dbra d7,.linelop
  2879.  
  2880.  rts
  2881.  
  2882. downrighttrans:
  2883.  
  2884.  cmp.w d2,d3
  2885.  bgt.s downmorerighttrans
  2886.  
  2887. downrightmoretrans:
  2888.  move.w #320*2,d6
  2889.  move.w d2,d0
  2890.  move.w d2,d7
  2891.  
  2892. .linelop:
  2893.  move.b (a0),d4
  2894.  move.w (a4,d4.w*2),(a0)+
  2895.  sub.w d3,d0
  2896.  bgt.s .noextra
  2897.  add.w d2,d0
  2898.  add.w d6,a0
  2899. .noextra:
  2900.  dbra d7,.linelop
  2901.  
  2902.  rts
  2903.  
  2904. downmorerighttrans:
  2905.  move.w #320*2,d6
  2906.  move.w d3,d0
  2907.  move.w d3,d7
  2908.  
  2909. .linelop:
  2910.  move.b (a0),d4
  2911.  move.w (a4,d4.w*2),(a0)
  2912.  add.w d6,a0
  2913.  sub.w d2,d0
  2914.  bgt.s .noextra
  2915.  add.w d3,d0
  2916.  addq #2,a0
  2917. .noextra:
  2918.  dbra d7,.linelop
  2919.  
  2920.  rts
  2921.  
  2922. NOLINE:
  2923.  rts
  2924.  
  2925. DRAWAMAPLINE:
  2926.  
  2927.  
  2928.  move.l FASTBUFFER,a0    ; screen to render to.
  2929.  cmp.w d1,d3
  2930.  bgt.s .okdown
  2931.  bne.s .aline
  2932.  cmp.w d0,d2
  2933.  beq.s NOLINE 
  2934. .aline
  2935.  exg d0,d2
  2936.  exg d1,d3
  2937. .okdown
  2938.  
  2939.  move.w d1,d5
  2940.  muls #320*2,d5
  2941.  add.l d5,a0
  2942.  lea (a0,d0.w*2),a0
  2943.  
  2944.  sub.w d1,d3
  2945.  
  2946.  sub.w d0,d2
  2947.  bge.s downright
  2948.  
  2949. downleft:
  2950.  neg.w d2
  2951.  cmp.w d2,d3
  2952.  bgt.s downmoreleft
  2953.  
  2954. downleftmore:
  2955.  move.w #320*2,d6
  2956.  move.w d2,d0
  2957.  move.w d2,d7
  2958.  
  2959. .linelop:
  2960.  move.w d4,(a0)
  2961.  subq #2,a0
  2962.  sub.w d3,d0
  2963.  bgt.s .noextra
  2964.  add.w d2,d0
  2965.  add.w d6,a0
  2966. .noextra:
  2967.  dbra d7,.linelop
  2968.  rts
  2969.  
  2970. downmoreleft:
  2971.  move.w #320*2,d6
  2972.  move.w d3,d0
  2973.  move.w d3,d7
  2974.  
  2975. .linelop:
  2976.  move.w d4,(a0)
  2977.  add.w d6,a0
  2978.  sub.w d2,d0
  2979.  bgt.s .noextra
  2980.  add.w d3,d0
  2981.  subq #2,a0
  2982. .noextra:
  2983.  dbra d7,.linelop
  2984.  
  2985.  rts
  2986.  
  2987. downright:
  2988.  
  2989.  cmp.w d2,d3
  2990.  bgt.s downmoreright
  2991.  
  2992. downrightmore:
  2993.  move.w #320*2,d6
  2994.  move.w d2,d0
  2995.  move.w d2,d7
  2996.  
  2997. .linelop:
  2998.  move.w d4,(a0)+
  2999.  sub.w d3,d0
  3000.  bgt.s .noextra
  3001.  add.w d2,d0
  3002.  add.w d6,a0
  3003. .noextra:
  3004.  dbra d7,.linelop
  3005.  
  3006.  rts
  3007.  
  3008. downmoreright:
  3009.  move.w #320*2,d6
  3010.  move.w d3,d0
  3011.  move.w d3,d7
  3012.  
  3013. .linelop:
  3014.  move.w d4,(a0)
  3015.  add.w d6,a0
  3016.  sub.w d2,d0
  3017.  bgt.s .noextra
  3018.  add.w d3,d0
  3019.  addq #2,a0
  3020. .noextra:
  3021.  dbra d7,.linelop
  3022.  
  3023.  rts
  3024.  
  3025. SAVETHESCREEN:
  3026.  
  3027.  move.l doslib,a6
  3028.  move.l #SAVENAME,d1
  3029.  move.l #1006,d2
  3030.  jsr -30(a6)
  3031.  move.l d0,handle
  3032.  
  3033.  move.l doslib,a6
  3034. ; move.l SCRNSHOWPTR,d2
  3035.  move.l handle,d1
  3036.  move.l #10240*8,d3
  3037.  jsr _LVOWrite(a6)
  3038.  
  3039.  move.l doslib,a6
  3040.  move.l handle,d1
  3041.  jsr -36(a6)
  3042.  
  3043.  add.b #1,SAVELETTER
  3044.  
  3045.  rts
  3046.  
  3047. SAVENAME: dc.b 'df0:rawscrn'
  3048. SAVELETTER: dc.b 'd',0
  3049.  
  3050.  even
  3051.  
  3052.  include "ab3:source_4000/CHUNKY.s"
  3053.  
  3054.  
  3055. MASTERQUITTING: dc.b 0
  3056. SLAVEQUITTING: dc.b 0
  3057. MASTERPAUSE: dc.b 0
  3058. SLAVEPAUSE: dc.b 0
  3059.  
  3060. PAUSEOPTS:
  3061.  include "ab3:source_4000/pauseopts"
  3062.  
  3063. ENDZONES:
  3064. ; LEVEL 1
  3065.  dc.w -1
  3066. ; dc.w 55
  3067. ; LEVEL 2
  3068.  dc.w 149
  3069. ; LEVEL 3
  3070.  dc.w 155
  3071. ; LEVEL 4
  3072.  dc.w 107
  3073. ; LEVEL 5
  3074.  dc.w 67
  3075. ; LEVEL 6
  3076.  dc.w 132
  3077. ; LEVEL 7
  3078.  dc.w 203
  3079. ; LEVEL 8
  3080.  dc.w 166
  3081. ; LEVEL 9
  3082.  dc.w 118
  3083. ; LEVEL 10
  3084.  dc.w 102
  3085. ; LEVEL 11
  3086.  dc.w 103
  3087. ; LEVEL 12
  3088.  dc.w 2
  3089. ; LEVEL 13
  3090.  dc.w 98
  3091. ; LEVEL 14
  3092.  dc.w 0
  3093. ; LEVEL 15
  3094.  dc.w 148
  3095. ; LEVEL 16
  3096.  dc.w 103
  3097.  
  3098. ***************************************************************************
  3099. ***************************************************************************
  3100. ****************** End of Main Loop here ********************************** 
  3101. ***************************************************************************
  3102. ***************************************************************************
  3103.  
  3104.  
  3105. CLEARKEYBOARD:
  3106.  move.l #KeyMap,a5
  3107.  moveq #0,d0
  3108.  move.w #15,d1
  3109. clrloo:
  3110.  move.l d0,(a5)+
  3111.  move.l d0,(a5)+
  3112.  move.l d0,(a5)+
  3113.  move.l d0,(a5)+
  3114.  dbra d1,clrloo
  3115.  rts
  3116.  
  3117. READCONTROLS: dc.w 0
  3118.  
  3119. tstststst: dc.w 0
  3120.  
  3121. BollocksRoom:
  3122.  dc.w -1
  3123.  ds.l 50
  3124.  
  3125. GUNYOFFS:
  3126.  dc.w 20
  3127.  dc.w 20
  3128.  dc.w 0
  3129.  dc.w 20
  3130.  dc.w 20
  3131.  dc.w 0
  3132.  dc.w 0
  3133.  dc.w 20
  3134.  
  3135. USEPLR1:
  3136.  
  3137. ***********************************
  3138.  
  3139.  move.l PLR1_Obj,a0 
  3140.  move.l ObjectPoints,a1
  3141.  move.l #ObjRotated,a2
  3142.  move.w (a0),d0
  3143.  move.l PLR1_xoff,(a1,d0.w*8)
  3144.  move.l PLR1_zoff,4(a1,d0.w*8)
  3145.  move.l PLR1_Roompt,a1
  3146.  
  3147.  moveq #0,d2
  3148.  move.b damagetaken(a0),d2
  3149.  beq .notbeenshot
  3150.  move.l #7*2116,hitcol
  3151.  sub.w d2,PLR1_energy
  3152.  movem.l d0-d7/a0-a6,-(a7)
  3153.  move.b #$fb,IDNUM
  3154.  move.w #19,Samplenum
  3155.  clr.b notifplaying
  3156.  move.w #0,Noisex
  3157.  move.w #0,Noisez
  3158.  move.w #100,Noisevol
  3159.  jsr MakeSomeNoise
  3160.  
  3161.  movem.l (a7)+,d0-d7/a0-a6
  3162.  
  3163. .notbeenshot
  3164.  move.b #0,damagetaken(a0)
  3165.  move.b PLR1_energy+1,numlives(a0)
  3166.  
  3167.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3168.  
  3169.  move.w (a1),12(a0)
  3170.  move.w (a1),d2
  3171.  move.l #ZoneBrightTable,a1
  3172.  move.l (a1,d2.w*4),d2
  3173.  tst.b PLR1_StoodInTop
  3174.  bne.s .okinbott
  3175.  swap d2
  3176. .okinbott:
  3177.  
  3178.  move.w d2,2(a0)
  3179.  
  3180.  move.l p1_yoff,d0
  3181.  move.l p1_height,d1
  3182.  asr.l #1,d1
  3183.  add.l d1,d0
  3184.  asr.l #7,d0
  3185.  move.w d0,4(a0)
  3186.  
  3187. ***********************************
  3188.  
  3189.  move.l PLR2_Obj,a0 
  3190.  
  3191.  move.w PLR2_angpos,d0
  3192.  and.w #8190,d0
  3193.  move.w d0,Facing(a0)
  3194.  
  3195.  jsr ViewpointToDraw
  3196.  asl.w #2,d0
  3197.  moveq #0,d1
  3198.  move.b p2_bobble,d1
  3199.  not.b d1
  3200.  lsr.b #3,d1
  3201.  and.b #$3,d1
  3202.  add.w d1,d0
  3203.  move.w d0,10(a0)
  3204.  move.w #10,8(a0)
  3205.  
  3206.  move.l ObjectPoints,a1
  3207.  move.l #ObjRotated,a2
  3208.  move.w (a0),d0
  3209.  move.l PLR2_xoff,(a1,d0.w*8)
  3210.  move.l PLR2_zoff,4(a1,d0.w*8)
  3211.  move.l PLR2_Roompt,a1
  3212.  
  3213.  moveq #0,d2
  3214.  move.b damagetaken(a0),d2
  3215.  beq .notbeenshot2
  3216.  sub.w d2,PLR2_energy
  3217. .notbeenshot2
  3218.  move.b #0,damagetaken(a0)
  3219.  move.b PLR2_energy+1,numlives(a0)
  3220.  
  3221.  move.b PLR2_StoodInTop,ObjInTop(a0)
  3222.  
  3223.  move.w (a1),12(a0)
  3224.  move.w (a1),d2
  3225.  move.l #ZoneBrightTable,a1
  3226.  move.l (a1,d2.w*4),d2
  3227.  tst.b PLR2_StoodInTop
  3228.  bne.s .okinbott2
  3229.  swap d2
  3230. .okinbott2:
  3231.  
  3232.  move.w d2,2(a0)
  3233.  
  3234.  move.l p2_yoff,d0
  3235.  move.l p2_height,d1
  3236.  asr.l #1,d1
  3237.  add.l d1,d0
  3238.  asr.l #7,d0
  3239.  move.w d0,4(a0)
  3240.  
  3241. **********************************
  3242.  
  3243.  
  3244.  move.l PLR1_Obj,a0
  3245.  move.w #-1,12+128(a0)
  3246.  
  3247.  rts
  3248.  
  3249. DRAWINGUN:
  3250.  move.l #Objects+9*16,a0
  3251.  move.l 4(a0),a5    ; ptr
  3252.  move.l 8(a0),a2    ; frames
  3253.  move.l 12(a0),a4    ; pal
  3254.  move.l (a0),a0        ; wad
  3255.  
  3256.  move.l #GunAnims,a1
  3257.  move.l (a1,d0.w*8),a1
  3258.  move.w (a1,d1.w*2),d5    ; frame of anim
  3259.  
  3260.  move.l #GUNYOFFS,a1
  3261.  move.w (a1,d0.w*2),d7    ; yoff
  3262.  move.l FASTBUFFER,a6
  3263.  move.w d7,d6
  3264.  muls #320*2*2,d6
  3265.  add.l d6,a6    ; screen pointer
  3266.  
  3267.  asl.w #2,d0
  3268.  add.w d5,d0    ; frame
  3269.  move.w (a2,d0.w*4),d1    ; xoff
  3270.  
  3271.  lea (a5,d1.w),a5    ; right ptr
  3272.  
  3273.  move.w #95,d0
  3274.  bsr DRAWCHUNK
  3275. ; addq.w #4,a6
  3276. ; move.w #31,d0
  3277. ; bsr DRAWCHUNK
  3278. ; addq.w #4,a6
  3279. ; move.w #31,d0
  3280. ; bsr DRAWCHUNK
  3281.  rts
  3282.  
  3283.  
  3284. DRAWCHUNK:
  3285.  move.w #78,d3
  3286.  sub.w d7,d3
  3287.  move.l a6,a3
  3288.  move.b (a5),d2
  3289.  move.l (a5)+,d1
  3290.  bne.s .noblank
  3291.  addq #4,a6
  3292.  dbra d0,DRAWCHUNK 
  3293.  rts
  3294.  
  3295. .noblank:
  3296.  and.l #$ffffff,d1
  3297.  lea (a0,d1.l),a1
  3298.  cmp.b #1,d2
  3299.  bgt.s thirdd
  3300.  beq.s secc
  3301. .drawdown:
  3302.  move.w (a1)+,d2
  3303.  and.w #%11111,d2
  3304.  beq.s .itsblank
  3305.  move.w (a4,d2.w*2),d4
  3306.  move.w d4,d5
  3307.  swap d4
  3308.  move.w d5,d4
  3309.  move.l d4,(a3)
  3310.  move.l d4,320*2(a3)
  3311. .itsblank
  3312.  add.w #320*2*2,a3
  3313.  dbra d3,.drawdown
  3314.  
  3315.  addq #4,a6
  3316.  dbra d0,DRAWCHUNK
  3317.  rts
  3318.  
  3319. secc:
  3320. .drawdown:
  3321.  move.w (a1)+,d2
  3322.  lsr.w #5,d2
  3323.  and.w #%11111,d2
  3324.  beq.s .itsblank
  3325.  move.w (a4,d2.w*2),d4
  3326.  move.w d4,d5
  3327.  swap d4
  3328.  move.w d5,d4
  3329.  move.l d4,(a3)
  3330.  move.l d4,320*2(a3)
  3331. .itsblank
  3332.  add.w #320*2*2,a3
  3333.  dbra d3,.drawdown
  3334.  
  3335.  addq #4,a6
  3336.  dbra d0,DRAWCHUNK
  3337.  rts
  3338.  
  3339. thirdd:
  3340. .drawdown:
  3341.  move.b (a1),d2
  3342.  addq #2,a1
  3343.  lsr.b #2,d2
  3344.  and.w #%11111,d2
  3345.  beq.s .itsblank
  3346.  move.w (a4,d2.w*2),d4
  3347.  move.w d4,d5
  3348.  swap d4
  3349.  move.w d5,d4
  3350.  move.l d4,(a3)
  3351.  move.l d4,320*2(a3)
  3352. .itsblank
  3353.  add.w #320*2*2,a3
  3354.  dbra d3,.drawdown
  3355.  
  3356.  addq #4,a6
  3357.  dbra d0,DRAWCHUNK
  3358.  rts
  3359.  
  3360.  
  3361.  
  3362. ***************************************************
  3363. **************************************************
  3364.  
  3365. USEPLR2:
  3366.  
  3367.  PROTKCHECK a0
  3368.  
  3369. ***********************************
  3370.  
  3371.  move.l PLR2_Obj,a0 
  3372.  move.l ObjectPoints,a1
  3373.  move.l #ObjRotated,a2
  3374.  move.w (a0),d0
  3375.  move.l PLR2_xoff,(a1,d0.w*8)
  3376.  move.l PLR2_zoff,4(a1,d0.w*8)
  3377.  move.l PLR2_Roompt,a1
  3378.  
  3379.  moveq #0,d2
  3380.  move.b damagetaken(a0),d2
  3381.  beq .notbeenshot
  3382.  move.l #7*2116,hitcol
  3383.  sub.w d2,PLR2_energy
  3384.  movem.l d0-d7/a0-a6,-(a7)
  3385.  move.w #19,Samplenum
  3386.  clr.b notifplaying
  3387.  move.b #$fb,IDNUM
  3388.  move.w #0,Noisex
  3389.  move.w #0,Noisez
  3390.  move.w #100,Noisevol
  3391.  jsr MakeSomeNoise
  3392.  
  3393.  movem.l (a7)+,d0-d7/a0-a6
  3394.  
  3395. .notbeenshot
  3396.  move.b #0,damagetaken(a0)
  3397.  move.b PLR2_energy+1,numlives(a0)
  3398.  
  3399.  move.b PLR2_StoodInTop,ObjInTop(a0)
  3400.  
  3401.  move.w (a1),12(a0)
  3402.  move.w (a1),d2
  3403.  move.l #ZoneBrightTable,a1
  3404.  move.l (a1,d2.w*4),d2
  3405.  tst.b PLR2_StoodInTop
  3406.  bne.s .okinbott
  3407.  swap d2
  3408. .okinbott:
  3409.  
  3410.  move.w d2,2(a0)
  3411.  
  3412.  move.l PLR2_yoff,d0
  3413.  move.l p2_height,d1
  3414.  asr.l #1,d1
  3415.  add.l d1,d0
  3416.  asr.l #7,d0
  3417.  move.w d0,4(a0)
  3418.  
  3419. ***********************************
  3420.  
  3421.  move.l PLR1_Obj,a0 
  3422.  
  3423.  move.w PLR1_angpos,d0
  3424.  and.w #8190,d0
  3425.  move.w d0,Facing(a0)
  3426.  
  3427.  jsr ViewpointToDraw
  3428.  asl.w #2,d0
  3429.  moveq #0,d1
  3430.  move.b p1_bobble,d1
  3431.  not.b d1
  3432.  lsr.b #3,d1
  3433.  and.b #$3,d1
  3434.  add.w d1,d0
  3435.  move.w d0,10(a0)
  3436.  move.w #10,8(a0)
  3437.  
  3438.  move.l ObjectPoints,a1
  3439.  move.l #ObjRotated,a2
  3440.  move.w (a0),d0
  3441.  move.l PLR1_xoff,(a1,d0.w*8)
  3442.  move.l PLR1_zoff,4(a1,d0.w*8)
  3443.  move.l PLR1_Roompt,a1
  3444.  
  3445.  moveq #0,d2
  3446.  move.b damagetaken(a0),d2
  3447.  beq .notbeenshot2
  3448.  sub.w d2,PLR1_energy
  3449. .notbeenshot2
  3450.  move.b #0,damagetaken(a0)
  3451.  move.b PLR1_energy+1,numlives(a0)
  3452.  
  3453.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3454.  
  3455.  move.w (a1),12(a0)
  3456.  move.w (a1),d2
  3457.  move.l #ZoneBrightTable,a1
  3458.  move.l (a1,d2.w*4),d2
  3459.  tst.b PLR1_StoodInTop
  3460.  bne.s .okinbott2
  3461.  swap d2
  3462. .okinbott2:
  3463.  
  3464.  move.w d2,2(a0)
  3465.  
  3466.  move.l PLR1_yoff,d0
  3467.  move.l p1_height,d1
  3468.  asr.l #1,d1
  3469.  add.l d1,d0
  3470.  asr.l #7,d0
  3471.  move.w d0,4(a0)
  3472.  
  3473. **********************************
  3474.  
  3475.  move.l PLR2_Obj,a0
  3476.  move.w #-1,12+64(a0)
  3477.  
  3478.  rts
  3479.  
  3480.  
  3481. GunSelected: dc.b 0
  3482.  even
  3483.  
  3484. GunAnims:
  3485.  dc.l MachineAnim,3
  3486.  dc.l PlasmaAnim,5
  3487.  dc.l RocketAnim,5
  3488.  dc.l FlameThrowerAnim,5
  3489.  dc.l GrenadeAnim,12
  3490.  dc.l 0,0
  3491.  dc.l 0,0
  3492.  dc.l ShotGunAnim,12+19+11+20+1
  3493.  
  3494. MachineAnim:
  3495.  dc.w 0,1,2,3
  3496. PlasmaAnim:
  3497.  dc.w 0,1,2,3,3,3
  3498. RocketAnim:
  3499.  dc.w 0,1,2,3,3,3
  3500. FlameThrowerAnim:
  3501.  dc.w 0,1,2,3,3,3
  3502. GrenadeAnim:
  3503.  dc.w 0,1,1,1,1
  3504.  dc.w 2,2,2,2,3
  3505.  dc.w 3,3,3
  3506. ShotGunAnim:
  3507.  dc.w 0
  3508.  dcb.w 12,2
  3509.  dcb.w 19,1
  3510.  dcb.w 11,2
  3511.  dcb.w 20,0
  3512.  dc.w 3
  3513.  
  3514. GunData: dc.l 0
  3515.  
  3516. PLR1_GunData:
  3517. ; 0=Pistol 1=Big Gun
  3518. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  3519.  
  3520. ; VISIBLE/INSTANT (0/FF)
  3521. ; damage,gotgun(b)
  3522. ; Delay (w), Lifetime of bullet (w)
  3523. ; Click or hold down (0,1)
  3524. ; BulSpd: (w)
  3525.  
  3526. ;0
  3527.  dc.w 0
  3528. ;2
  3529.  dc.b 8,3
  3530. ;4
  3531.  dc.b 15
  3532. ;5
  3533.  dc.b -1
  3534. ;6
  3535.  dc.b 4,$ff
  3536. ;8
  3537.  dc.w 5,-1,1,0
  3538. ;16
  3539.  dc.w 0,0,0
  3540. ;22
  3541.  dc.w 1
  3542.  
  3543.  ds.w 4
  3544.  
  3545. ;PlasmaGun
  3546.  
  3547.  dc.w 0
  3548.  dc.b 8,1
  3549.  dc.b 20
  3550.  dc.b 0
  3551.  dc.b 16,0
  3552.  dc.w 10,-1,0,5
  3553.  dc.w 0,0,0
  3554.  dc.w 1
  3555.  
  3556.  ds.w 4
  3557.  
  3558. ;RocketLauncher
  3559.  
  3560.  dc.w 0
  3561.  dc.b 8,9
  3562.  dc.b 2
  3563.  dc.b 0
  3564.  dc.b 12,0
  3565.  dc.w 30,-1,0,5
  3566.  dc.w 0,0,0
  3567.  dc.w 1
  3568.  
  3569.  
  3570.  ds.w 4
  3571.  
  3572. ; FlameThrower
  3573.  
  3574.  dc.w 90*8
  3575.  dc.b 1,22
  3576.  dc.b 40
  3577.  dc.b 0
  3578.  dc.b 8,$0    
  3579.  dc.w 5,50,1,4
  3580.  dc.w 0,0,0
  3581.  dc.w 1
  3582.  
  3583.  ds.w 4
  3584.  
  3585. ;Grenade launcher
  3586.  
  3587.  
  3588.  dc.w 0
  3589.  dc.b 8,9
  3590.  dc.b 6
  3591.  dc.b 0
  3592.  dc.b 8,0
  3593.  dc.w 50,100,1,5
  3594.  dc.w 60,3
  3595.  dc.w -1000
  3596.  dc.w 1
  3597.  
  3598.  ds.w 4
  3599.  
  3600. ; WORMGUN
  3601.  
  3602.  dc.w 0
  3603.  dc.b 0,0
  3604.  dc.b 0
  3605.  dc.b 0,0
  3606.  dc.w 0,-1,0,5
  3607.  dc.w 0,0
  3608.  dc.w 0
  3609.  dc.w 1
  3610.  ds.w 4
  3611.  
  3612. ; ToughMarineGun
  3613.  
  3614.  dc.w 0
  3615.  dc.b 0,0
  3616.  dc.b 0
  3617.  dc.b 0,0
  3618.  dc.w 0,-1,0,5
  3619.  dc.w 0,0
  3620.  dc.w 0
  3621.  dc.w 1
  3622.  ds.w 4
  3623.  
  3624. ; Shotgun
  3625.  
  3626. ;0
  3627.  dc.w 0
  3628. ;2
  3629.  dc.b 8,21
  3630. ;4
  3631.  dc.b 15
  3632. ;5
  3633.  dc.b -1
  3634. ;6
  3635.  dc.b 4,0
  3636. ;8
  3637.  dc.w 50,-1,1,0
  3638. ;16
  3639.  dc.w 0,0,0
  3640. ;22
  3641.  dc.w 7
  3642.  
  3643.  ds.w 4
  3644.  
  3645. PLR2_GunData:
  3646. ; 0=Pistol 1=Big Gun
  3647. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  3648.  
  3649. ; VISIBLE/INSTANT (0/FF)
  3650. ; damage,gotgun(b)
  3651. ; Delay (w)
  3652.  
  3653. ;0
  3654.  dc.w 0
  3655. ;2
  3656.  dc.b 8,3
  3657. ;4
  3658.  dc.b 15
  3659. ;5
  3660.  dc.b -1
  3661. ;6
  3662.  dc.b 4,$ff
  3663. ;8
  3664.  dc.w 5,-1,1,0
  3665. ;16
  3666.  dc.w 0,0,0
  3667. ;22
  3668.  dc.w 1
  3669.  
  3670.  ds.w 4
  3671.  
  3672. ;PlasmaGun
  3673.  
  3674.  dc.w 0
  3675.  dc.b 8,1
  3676.  dc.b 20
  3677.  dc.b 0
  3678.  dc.b 16,0
  3679.  dc.w 10,-1,0,5
  3680.  dc.w 0,0,0
  3681.  dc.w 1
  3682.  
  3683.  ds.w 4
  3684.  
  3685. ;RocketLauncher
  3686.  
  3687.  dc.w 0
  3688.  dc.b 8,9
  3689.  dc.b 2
  3690.  dc.b 0
  3691.  dc.b 12,0
  3692.  dc.w 30,-1,0,5
  3693.  dc.w 0,0,0
  3694.  dc.w 1
  3695.  
  3696.  
  3697.  ds.w 4
  3698.  
  3699. ; FlameThrower
  3700.  
  3701.  dc.w 90*8
  3702.  dc.b 1,22
  3703.  dc.b 40
  3704.  dc.b 0
  3705.  dc.b 8,$0    
  3706.  dc.w 5,50,1,4
  3707.  dc.w 0,0,0
  3708.  dc.w 1
  3709.  
  3710.  ds.w 4
  3711.  
  3712. ;Grenade launcher
  3713.  
  3714.  
  3715.  dc.w 0
  3716.  dc.b 8,9
  3717.  dc.b 6
  3718.  dc.b 0
  3719.  dc.b 8,0
  3720.  dc.w 50,100,1,5
  3721.  dc.w 60,3
  3722.  dc.w -1000
  3723.  dc.w 1
  3724.  
  3725.  ds.w 4
  3726.  
  3727. ; WORMGUN
  3728.  
  3729.  dc.w 0
  3730.  dc.b 0,0
  3731.  dc.b 0
  3732.  dc.b 0,0
  3733.  dc.w 0,-1,0,5
  3734.  dc.w 0,0
  3735.  dc.w 0
  3736.  dc.w 1
  3737.  ds.w 4
  3738.  
  3739. ; ToughMarineGun
  3740.  
  3741.  dc.w 0
  3742.  dc.b 0,0
  3743.  dc.b 0
  3744.  dc.b 0,0
  3745.  dc.w 0,-1,0,5
  3746.  dc.w 0,0
  3747.  dc.w 0
  3748.  dc.w 1
  3749.  ds.w 4
  3750.  
  3751. ; Shotgun
  3752.  
  3753. ;0
  3754.  dc.w 0
  3755. ;2
  3756.  dc.b 8,21
  3757. ;4
  3758.  dc.b 15
  3759. ;5
  3760.  dc.b -1
  3761. ;6
  3762.  dc.b 4,0
  3763. ;8
  3764.  dc.w 50,-1,1,0
  3765. ;16
  3766.  dc.w 0,0,0
  3767. ;22
  3768.  dc.w 7
  3769.  
  3770.  ds.w 4
  3771.  
  3772.  
  3773.  
  3774. protA: dc.w 0
  3775.  
  3776. Path:
  3777. ; incbin "testpath"
  3778. endpath:
  3779. pathpt: dc.l Path
  3780.  
  3781.  
  3782. PLR1KEYS: dc.b 0
  3783. PLR1PATH: dc.b 0
  3784. PLR1MOUSE: dc.b -1
  3785. PLR1JOY: dc.b 0
  3786. PLR2KEYS: dc.b 0
  3787. PLR2PATH: dc.b 0
  3788. PLR2MOUSE: dc.b -1
  3789. PLR2JOY: dc.b 0
  3790.  
  3791.  even
  3792.  
  3793. PLR1_bobble: dc.w 0
  3794. PLR2_bobble: dc.w 0
  3795. xwobble: dc.l 0
  3796. xwobxoff: dc.w 0
  3797.  
  3798. xwobzoff: dc.w 0
  3799.  
  3800. PLR1_Control:
  3801.  
  3802. ; Take a snapshot of everything.
  3803.  
  3804.  move.l PLR1_xoff,d2
  3805.  move.l d2,PLR1_oldxoff
  3806.  move.l d2,oldx
  3807.  move.l PLR1_zoff,d3
  3808.  move.l d3,PLR1_oldzoff
  3809.  move.l d3,oldz
  3810.  move.l p1_xoff,d0
  3811.  move.l d0,PLR1_xoff
  3812.  move.l d0,newx
  3813.  move.l p1_zoff,d1
  3814.  move.l d1,newz
  3815.  move.l d1,PLR1_zoff
  3816.  
  3817.  move.l p1_height,PLR1_height
  3818.  
  3819.  sub.l d2,d0
  3820.  sub.l d3,d1
  3821.  move.l d0,xdiff
  3822.  move.l d1,zdiff
  3823.  move.w p1_angpos,d0
  3824.  move.w d0,PLR1_angpos
  3825.  
  3826.  move.l #SineTable,a1
  3827.  move.w (a1,d0.w),PLR1_sinval
  3828.  add.w #2048,d0
  3829.  and.w #8190,d0
  3830.  move.w (a1,d0.w),PLR1_cosval
  3831.  
  3832.  move.l p1_yoff,d0
  3833.  move.w p1_bobble,d1
  3834.  move.w (a1,d1.w),d1
  3835.  move.w d1,d3
  3836.  ble.s notnegative
  3837.  neg.w d1
  3838. notnegative:
  3839.  add.w #16384,d1
  3840.  asr.w #4,d1
  3841.  
  3842.  tst.b PLR1_Ducked
  3843.  bne.s .notdouble
  3844.  add.w d1,d1
  3845. .notdouble
  3846.  ext.l d1
  3847.  move.l PLR1_height,d4
  3848.  sub.l d1,d4
  3849.  add.l d1,d0
  3850.  
  3851.  cmp.b #'s',mors
  3852.  beq.s .otherwob
  3853.  asr.w #6,d3
  3854.  ext.l d3
  3855.  move.l d3,xwobble
  3856.  move.w PLR1_sinval,d1
  3857.  muls d3,d1
  3858.  move.w PLR1_cosval,d2
  3859.  muls d3,d2
  3860.  swap d1
  3861.  swap d2
  3862.  asr.w #7,d1
  3863.  move.w d1,xwobxoff
  3864.  asr.w #7,d2
  3865.  neg.w d2
  3866.  move.w d2,xwobzoff
  3867. .otherwob
  3868.  
  3869.  move.l d0,PLR1_yoff
  3870.  move.l d0,newy
  3871.  move.l d0,oldy
  3872.  
  3873.  move.l d4,thingheight
  3874.  move.l #40*256,StepUpVal
  3875.  tst.b PLR1_Ducked
  3876.  beq.s .okbigstep
  3877.  move.l #10*256,StepUpVal
  3878. .okbigstep:
  3879.  
  3880.  move.l #$1000000,StepDownVal
  3881.  
  3882.  move.l PLR1_Roompt,a0
  3883.  move.w ToTelZone(a0),d0
  3884.  blt .noteleport
  3885.  
  3886.  move.w ToTelX(a0),newx
  3887.  move.w ToTelZ(a0),newz
  3888.  move.w #-1,CollId
  3889.  move.l #%111111111111111111,CollideFlags
  3890.  bsr Collision
  3891.  tst.b hitwall
  3892.  beq.s .teleport
  3893.  
  3894.  move.w PLR1_xoff,newx
  3895.  move.w PLR1_zoff,newz
  3896.  bra .noteleport
  3897.  
  3898. .teleport:
  3899.  
  3900.  move.l PLR1_Roompt,a0
  3901.  move.w ToTelZone(a0),d0
  3902.  move.w ToTelX(a0),PLR1_xoff
  3903.  move.w ToTelZ(a0),PLR1_zoff
  3904.  move.l PLR1_yoff,d1
  3905.  sub.l ToZoneFloor(a0),d1
  3906.  move.l ZoneAdds,a0
  3907.  move.l (a0,d0.w*4),a0
  3908.  add.l LEVELDATA,a0
  3909.  move.l a0,PLR1_Roompt
  3910.  add.l ToZoneFloor(a0),d1
  3911.  move.l d1,PLR1s_yoff
  3912.  move.l d1,PLR1_yoff
  3913.  move.l d1,PLR1s_tyoff
  3914.  move.l PLR1_xoff,PLR1s_xoff
  3915.  move.l PLR1_zoff,PLR1s_zoff
  3916.  
  3917.  SAVEREGS
  3918.  move.w #0,Noisex
  3919.  move.w #0,Noisez
  3920.  move.w #26,Samplenum
  3921.  move.w #100,Noisevol
  3922.  move.b #$fa,IDNUM
  3923.  jsr MakeSomeNoise
  3924.  GETREGS
  3925.  
  3926.  bra .cantmove
  3927.  
  3928. .noteleport:
  3929.  
  3930.  move.l PLR1_Roompt,objroom
  3931.  move.w #%100000000,wallflags
  3932.  move.b PLR1_StoodInTop,StoodInTop
  3933.  
  3934.  move.l #%1011111110111000001,CollideFlags
  3935.  move.w #-1,CollId
  3936.  
  3937.  bsr Collision
  3938.  tst.b hitwall
  3939.  beq.s .nothitanything
  3940.  move.w oldx,PLR1_xoff
  3941.  move.w oldz,PLR1_zoff
  3942.  move.l PLR1_xoff,PLR1s_xoff
  3943.  move.l PLR1_zoff,PLR1s_zoff
  3944.  bra .cantmove
  3945. .nothitanything:
  3946.  
  3947.  move.w #40,extlen
  3948.  move.b #0,awayfromwall
  3949.  
  3950.  clr.b exitfirst
  3951.  clr.b wallbounce
  3952.  bsr MoveObject
  3953.  move.b StoodInTop,PLR1_StoodInTop
  3954.  move.l objroom,PLR1_Roompt
  3955.  move.w newx,PLR1_xoff
  3956.  move.w newz,PLR1_zoff
  3957.  move.l PLR1_xoff,PLR1s_xoff
  3958.  move.l PLR1_zoff,PLR1s_zoff
  3959.  
  3960. .cantmove:
  3961.  
  3962.  move.l PLR1_Roompt,a0
  3963.  
  3964.  move.l ToZoneFloor(a0),d0
  3965.  tst.b PLR1_StoodInTop
  3966.  beq.s notintop
  3967.  move.l ToUpperFloor(a0),d0
  3968. notintop:
  3969.  
  3970.  adda.w #ToZonePts,a0
  3971.  sub.l PLR1_height,d0
  3972.  move.l d0,PLR1s_tyoff
  3973.  move.w p1_angpos,tmpangpos
  3974.  
  3975. ; move.l (a0),a0        ; jump to viewpoint list
  3976.  * A0 is pointing at a pointer to list of points to rotate
  3977.  move.w (a0)+,d1
  3978.  ext.l d1
  3979.  add.l PLR1_Roompt,d1
  3980.  move.l d1,PLR1_PointsToRotatePtr
  3981.  tst.w (a0)+
  3982.  sne.s DRAWNGRAPHTOP
  3983.  beq.s nobackgraphics
  3984.  cmp.b #'s',mors
  3985.  beq.s nobackgraphics
  3986.  move.l a0,-(a7)
  3987.  jsr putinbackdrop 
  3988.  move.l (a7)+,a0
  3989. nobackgraphics:
  3990.  adda.w #10,a0
  3991.  move.l a0,PLR1_ListOfGraphRooms
  3992.  
  3993. *************************************************
  3994.  rts
  3995.  
  3996. DRAWNGRAPHTOP
  3997.  dc.w 0 
  3998. tstzone: dc.l 0
  3999. CollId: dc.w 0
  4000.  
  4001. PLR2_Control:
  4002.  
  4003.  PROTLCHECK a0
  4004.  
  4005. ; Take a snapshot of everything.
  4006.  
  4007.  move.l PLR2_xoff,d2
  4008.  move.l d2,PLR2_oldxoff
  4009.  move.l d2,oldx
  4010.  move.l PLR2_zoff,d3
  4011.  move.l d3,PLR2_oldzoff
  4012.  move.l d3,oldz
  4013.  move.l p2_xoff,d0
  4014.  move.l d0,PLR2_xoff
  4015.  move.l d0,newx
  4016.  move.l p2_zoff,d1
  4017.  move.l d1,newz
  4018.  move.l d1,PLR2_zoff
  4019.  
  4020.  move.l p2_height,PLR2_height
  4021.  
  4022.  sub.l d2,d0
  4023.  sub.l d3,d1
  4024.  move.l d0,xdiff
  4025.  move.l d1,zdiff
  4026.  move.w p2_angpos,d0
  4027.  move.w d0,PLR2_angpos
  4028.  
  4029.  move.l #SineTable,a1
  4030.  move.w (a1,d0.w),PLR2_sinval
  4031.  add.w #2048,d0
  4032.  and.w #8190,d0
  4033.  move.w (a1,d0.w),PLR2_cosval
  4034.  
  4035.  move.l p2_yoff,d0
  4036.  move.w p2_bobble,d1
  4037.  move.w (a1,d1.w),d1
  4038.  move.w d1,d3
  4039.  ble.s .notnegative
  4040.  neg.w d1
  4041. .notnegative:
  4042.  add.w #16384,d1
  4043.  asr.w #4,d1
  4044.  add.w d1,d1
  4045.  ext.l d1
  4046.  move.l PLR2_height,d4
  4047.  sub.l d1,d4
  4048.  add.l d1,d0
  4049.  
  4050.  cmp.b #'s',mors
  4051.  bne.s .otherwob
  4052.  asr.w #6,d3
  4053.  ext.l d3
  4054.  move.l d3,xwobble
  4055.  move.w PLR2_sinval,d1
  4056.  muls d3,d1
  4057.  move.w PLR2_cosval,d2
  4058.  muls d3,d2
  4059.  swap d1
  4060.  swap d2
  4061.  asr.w #7,d1
  4062.  move.w d1,xwobxoff
  4063.  asr.w #7,d2
  4064.  neg.w d2
  4065.  move.w d2,xwobzoff
  4066. .otherwob
  4067.  
  4068.  move.l d0,PLR2_yoff
  4069.  move.l d0,newy
  4070.  move.l d0,oldy
  4071.  
  4072.  move.l d4,thingheight
  4073.  move.l #40*256,StepUpVal
  4074.  tst.b PLR2_Ducked
  4075.  beq.s .okbigstep
  4076.  move.l #10*256,StepUpVal
  4077. .okbigstep:
  4078.  
  4079.  move.l #$1000000,StepDownVal
  4080.  
  4081.  move.l PLR2_Roompt,a0
  4082.  move.w ToTelZone(a0),d0
  4083.  blt .noteleport
  4084.  
  4085.  move.w ToTelX(a0),newx
  4086.  move.w ToTelZ(a0),newz
  4087.  move.w #-1,CollId
  4088.  move.l #%111111111111111111,CollideFlags
  4089.  bsr Collision
  4090.  tst.b hitwall
  4091.  beq.s .teleport
  4092.  
  4093.  move.w PLR2_xoff,newx
  4094.  move.w PLR2_zoff,newz
  4095.  bra .noteleport
  4096.  
  4097. .teleport:
  4098.  
  4099.  move.l PLR2_Roompt,a0
  4100.  move.w ToTelZone(a0),d0
  4101.  move.w ToTelX(a0),PLR2_xoff
  4102.  move.w ToTelZ(a0),PLR2_zoff
  4103.  move.l PLR2_yoff,d1
  4104.  sub.l ToZoneFloor(a0),d1
  4105.  move.l ZoneAdds,a0
  4106.  move.l (a0,d0.w*4),a0
  4107.  add.l LEVELDATA,a0
  4108.  move.l a0,PLR2_Roompt
  4109.  add.l ToZoneFloor(a0),d1
  4110.  move.l d1,PLR2s_yoff
  4111.  move.l d1,PLR2_yoff
  4112.  move.l d1,PLR2s_tyoff
  4113.  move.l PLR2_xoff,PLR2s_xoff
  4114.  move.l PLR2_zoff,PLR2s_zoff
  4115.  
  4116.  SAVEREGS
  4117.  move.w #0,Noisex
  4118.  move.w #0,Noisez
  4119.  move.w #26,Samplenum
  4120.  move.w #100,Noisevol
  4121.  move.b #$fa,IDNUM
  4122.  jsr MakeSomeNoise
  4123.  GETREGS
  4124.  
  4125.  bra .cantmove
  4126.  
  4127. .noteleport:
  4128.  
  4129.  move.l PLR2_Roompt,objroom
  4130.  move.w #%100000000000,wallflags
  4131.  move.b PLR2_StoodInTop,StoodInTop
  4132.  
  4133.  move.l #%1011111010111100001,CollideFlags
  4134.  move.w #-1,CollId
  4135.  
  4136.  bsr Collision
  4137.  tst.b hitwall
  4138.  beq.s .nothitanything
  4139.  move.w oldx,PLR2_xoff
  4140.  move.w oldz,PLR2_zoff
  4141.  move.l PLR2_xoff,PLR2s_xoff
  4142.  move.l PLR2_zoff,PLR2s_zoff
  4143.  bra .cantmove
  4144. .nothitanything:
  4145.  
  4146.  move.w #40,extlen
  4147.  move.b #0,awayfromwall
  4148.  
  4149.  clr.b exitfirst
  4150.  clr.b wallbounce
  4151.  bsr MoveObject
  4152.  move.b StoodInTop,PLR2_StoodInTop
  4153.  move.l objroom,PLR2_Roompt
  4154.  move.w newx,PLR2_xoff
  4155.  move.w newz,PLR2_zoff
  4156.  move.l PLR2_xoff,PLR2s_xoff
  4157.  move.l PLR2_zoff,PLR2s_zoff
  4158.  
  4159. .cantmove
  4160.  
  4161.  move.l PLR2_Roompt,a0
  4162.  
  4163.  move.l ToZoneFloor(a0),d0
  4164.  tst.b PLR2_StoodInTop
  4165.  beq.s .notintop
  4166.  move.l ToUpperFloor(a0),d0
  4167. .notintop:
  4168.  
  4169.  adda.w #ToZonePts,a0
  4170.  sub.l PLR2_height,d0
  4171.  move.l d0,PLR2s_tyoff
  4172.  move.w p2_angpos,tmpangpos
  4173.  
  4174. ; move.l (a0),a0        ; jump to viewpoint list
  4175.  * A0 is pointing at a pointer to list of points to rotate
  4176.  move.w (a0)+,d1
  4177.  ext.l d1
  4178.  add.l PLR2_Roompt,d1
  4179.  move.l d1,PLR2_PointsToRotatePtr
  4180.  tst.w (a0)+
  4181.  beq.s .nobackgraphics
  4182.  cmp.b #'s',mors
  4183.  bne.s .nobackgraphics
  4184.  move.l a0,-(a7)
  4185.  jsr putinbackdrop 
  4186.  move.l (a7)+,a0
  4187. .nobackgraphics:
  4188.  adda.w #10,a0
  4189.  move.l a0,PLR2_ListOfGraphRooms
  4190.  
  4191. *****************************************************
  4192.  
  4193.  rts
  4194.  
  4195.  
  4196. KeyMap: ds.b 256
  4197.  
  4198. fillscrnwater:
  4199.  dc.w 0
  4200. DONTDOGUN:
  4201.  dc.w 0
  4202.  
  4203. temptemp: ds.l 200
  4204. temptempptr: dc.l 0
  4205.  
  4206. DrawDisplay:
  4207.  
  4208.  move.l #temptemp,temptempptr
  4209.  
  4210.  clr.b fillscrnwater
  4211.  
  4212.  move.l #SineTable,a0
  4213.  move.w angpos,d0
  4214.  move.w (a0,d0.w),d6
  4215.  adda.w #2048,a0
  4216.  move.w (a0,d0.w),d7
  4217.  move.w d6,sinval
  4218.  move.w d7,cosval
  4219.  
  4220.  move.l #KeyMap,a5
  4221.  moveq #0,d5
  4222.  move.b look_behind_key,d5
  4223.  tst.b (a5,d5.w)
  4224.  sne DONTDOGUN
  4225.  beq.s .nolookback
  4226.  neg.w cosval
  4227.  neg.w sinval
  4228. .nolookback:
  4229.  
  4230.  
  4231.  move.l yoff,d0
  4232.  asr.l #8,d0
  4233.  move.w d0,d1
  4234.  add.w #256-32,d1
  4235.  and.w #255,d1
  4236.  move.w d1,wallyoff
  4237.  move.l yoff,d0
  4238.  asr.l #6,d0
  4239.  move.w d0,flooryoff
  4240.  
  4241.  move.w xoff,d6
  4242.  move.w d6,d3
  4243.  asr.w #1,d3
  4244.  add.w d3,d6
  4245.  asr.w #1,d6
  4246.  move.w d6,xoff34
  4247.  
  4248.  move.w zoff,d6
  4249.  move.w d6,d3
  4250.  asr.w #1,d3
  4251.  add.w d3,d6
  4252.  asr.w #1,d6
  4253.  move.w d6,zoff34
  4254.  
  4255.  bsr RotateLevelPts
  4256.  bsr RotateObjectPts
  4257.  bsr CalcPLR1InLine
  4258.  
  4259.  
  4260.  cmp.b #'n',mors
  4261.  bne.s doplr2too
  4262.  move.l PLR2_Obj,a0
  4263.  move.w #-1,12(a0)
  4264.  move.w #-1,GraphicRoom(a0)
  4265.  bra noplr2either
  4266.  
  4267. doplr2too:
  4268.  bsr CalcPLR2InLine
  4269. noplr2either:
  4270.  
  4271.  move.l endoflist,a0
  4272. subroomloop:
  4273.  move.w -(a0),d7
  4274.  blt jumpoutofrooms
  4275.  
  4276. ; bsr setlrclip
  4277. ; move.w leftclip,d0
  4278. ; cmp.w rightclip,d0
  4279. ; bge subroomloop
  4280.  move.l a0,-(a7)
  4281.  
  4282.  move.l ZoneAdds,a0
  4283.  move.l (a0,d7.w*4),a0
  4284.  add.l LEVELDATA,a0
  4285.  move.l ToZoneRoof(a0),SplitHeight
  4286.  move.l a0,ROOMBACK
  4287.  
  4288.  move.l ZoneGraphAdds,a0
  4289.  move.l 4(a0,d7.w*8),a2
  4290.  move.l (a0,d7.w*8),a0
  4291.  
  4292.  add.l LEVELGRAPHICS,a0
  4293.  add.l LEVELGRAPHICS,a2
  4294.  move.l a2,ThisRoomToDraw+4
  4295.  move.l a0,ThisRoomToDraw
  4296.  
  4297.  move.l ListOfGraphRooms,a1
  4298.  
  4299.  
  4300.  
  4301. finditit:
  4302.  tst.w (a1)
  4303.  blt nomoretodoatall
  4304.  cmp.w (a1),d7
  4305.  beq outoffind
  4306.  adda.w #8,a1
  4307.  bra finditit
  4308.  
  4309. outoffind:
  4310.  
  4311.  move.l a1,-(a7)
  4312.  
  4313.  
  4314.  move.w #0,leftclip
  4315.  move.w RIGHTX,rightclip
  4316.  moveq #0,d7
  4317.  move.w 2(a1),d7
  4318.  blt.s outofrcliplop
  4319.  move.l LEVELCLIPS,a0
  4320.  lea (a0,d7.l*2),a0
  4321.  
  4322.  tst.w (a0)
  4323.  blt outoflcliplop
  4324.  
  4325.  bsr NEWsetlclip
  4326.  
  4327. intolcliplop:        ; clips
  4328.  tst.w (a0)
  4329.  blt outoflcliplop
  4330.  
  4331.  bsr NEWsetlclip 
  4332.  bra intolcliplop
  4333.  
  4334. outoflcliplop:
  4335.  
  4336.  addq #2,a0
  4337.  
  4338.  tst.w (a0)
  4339.  blt outofrcliplop
  4340.  
  4341.  bsr NEWsetrclip
  4342.  
  4343. intorcliplop:        ; clips
  4344.  tst.w (a0)
  4345.  blt outofrcliplop
  4346.  
  4347.  bsr NEWsetrclip 
  4348.  bra intorcliplop
  4349.  
  4350. outofrcliplop:
  4351.  
  4352.  
  4353.  move.w leftclip,d0
  4354.  cmp.w RIGHTX,d0
  4355.  bge dontbothercantseeit
  4356.  move.w rightclip,d1
  4357.  blt dontbothercantseeit
  4358.  cmp.w d1,d0
  4359.  bge dontbothercantseeit
  4360.  
  4361.  move.l yoff,d0
  4362.  cmp.l SplitHeight,d0
  4363.  blt botfirst
  4364.  
  4365.  move.l ThisRoomToDraw+4,a0
  4366.  cmp.l LEVELGRAPHICS,a0
  4367.  beq.s noupperroom
  4368.  st DOUPPER
  4369.  
  4370.  move.l ROOMBACK,a1
  4371.  move.l ToUpperRoof(a1),TOPOFROOM
  4372.  move.l ToUpperFloor(a1),BOTOFROOM
  4373.  
  4374.  move.l #CurrentPointBrights+4,PointBrightsPtr
  4375.  bsr dothisroom
  4376. noupperroom:
  4377.  move.l ThisRoomToDraw,a0
  4378.  clr.b DOUPPER
  4379.  move.l #CurrentPointBrights,PointBrightsPtr
  4380.  
  4381.  move.l ROOMBACK,a1
  4382.  move.l ToZoneRoof(a1),d0
  4383.  move.l d0,TOPOFROOM
  4384.  move.l ToZoneFloor(a1),d1
  4385.  move.l d1,BOTOFROOM
  4386.  
  4387.  move.l ToZoneWater(a1),d2
  4388.  cmp.l yoff,d2
  4389.  blt.s .abovefirst
  4390.  move.l d2,BEFOREWATTOP
  4391.  move.l d1,BEFOREWATBOT
  4392.  move.l d2,AFTERWATBOT
  4393.  move.l d0,AFTERWATTOP
  4394.  bra.s .belowfirst
  4395. .abovefirst:
  4396.  move.l d0,BEFOREWATTOP
  4397.  move.l d2,BEFOREWATBOT
  4398.  move.l d1,AFTERWATBOT
  4399.  move.l d2,AFTERWATTOP
  4400. .belowfirst:
  4401.  
  4402.  bsr dothisroom
  4403.  
  4404.  bra dontbothercantseeit
  4405. botfirst:
  4406.  
  4407.  move.l ThisRoomToDraw,a0
  4408.  clr.b DOUPPER
  4409.  move.l #CurrentPointBrights,PointBrightsPtr
  4410.  
  4411.  move.l ROOMBACK,a1
  4412.  move.l ToZoneRoof(a1),d0
  4413.  move.l d0,TOPOFROOM
  4414.  move.l ToZoneFloor(a1),d1
  4415.  move.l d1,BOTOFROOM
  4416.  
  4417.  move.l ToZoneWater(a1),d2
  4418.  cmp.l yoff,d2
  4419.  blt.s .abovefirst
  4420.  move.l d2,BEFOREWATTOP
  4421.  move.l d1,BEFOREWATBOT
  4422.  move.l d2,AFTERWATBOT
  4423.  move.l d0,AFTERWATTOP
  4424.  bra.s .belowfirst
  4425. .abovefirst:
  4426.  move.l d0,BEFOREWATTOP
  4427.  move.l d2,BEFOREWATBOT
  4428.  move.l d1,AFTERWATBOT
  4429.  move.l d2,AFTERWATTOP
  4430. .belowfirst:
  4431.  
  4432.  
  4433.  bsr dothisroom
  4434.  move.l ThisRoomToDraw+4,a0
  4435.  cmp.l LEVELGRAPHICS,a0
  4436.  beq.s noupperroom2
  4437.  move.l #CurrentPointBrights+4,PointBrightsPtr
  4438.  
  4439.  move.l ROOMBACK,a1
  4440.  move.l ToUpperRoof(a1),TOPOFROOM
  4441.  move.l ToUpperFloor(a1),BOTOFROOM
  4442.  
  4443.  st DOUPPER
  4444.  bsr dothisroom
  4445. noupperroom2:
  4446.  
  4447. dontbothercantseeit:
  4448. pastemp:
  4449.  
  4450.  move.l (a7)+,a1
  4451.  move.l ThisRoomToDraw,a0
  4452.  move.w (a0),d7
  4453.  
  4454.  adda.w #8,a1
  4455.  bra finditit
  4456.  
  4457. nomoretodoatall:
  4458.  
  4459.  move.l (a7)+,a0
  4460.  
  4461.  bra subroomloop
  4462.  
  4463. jumpoutofrooms:
  4464.  
  4465.  tst.b DONTDOGUN
  4466.  bne NOGUNLOOK
  4467.  
  4468.  cmp.b #'s',mors
  4469.  beq.s drawslavegun
  4470.  
  4471.  moveq #0,d0
  4472.  move.b PLR1_GunSelected,d0
  4473.  moveq #0,d1
  4474.  move.b PLR1_GunFrame,d1
  4475. ; bsr DRAWINGUN
  4476.  bra drawngun
  4477.  
  4478. drawslavegun
  4479.  moveq #0,d0
  4480.  move.b PLR2_GunSelected,d0
  4481.  moveq #0,d1
  4482.  move.b PLR2_GunFrame,d1
  4483. ; bsr DRAWINGUN
  4484.  
  4485. drawngun:
  4486.  
  4487. NOGUNLOOK:
  4488.  
  4489.  moveq #0,d1
  4490.  move.b PLR1_GunFrame,d1
  4491.  sub.w TempFrames,d1
  4492.  bgt.s .nn
  4493.  moveq #0,d1
  4494. .nn
  4495.  move.b d1,PLR1_GunFrame
  4496.  
  4497.  ble.s .donefire
  4498.  sub.b #1,PLR1_GunFrame
  4499. .donefire:
  4500.  
  4501.  moveq #0,d1
  4502.  move.b PLR2_GunFrame,d1
  4503.  sub.w TempFrames,d1
  4504.  bgt.s .nn2
  4505.  moveq #0,d1
  4506. .nn2
  4507.  move.b d2,PLR2_GunFrame
  4508.  
  4509.  ble.s .donefire2
  4510.  sub.b #1,PLR2_GunFrame
  4511. .donefire2:
  4512.  
  4513.  tst.b DOANYWATER
  4514.  beq.s nowaterfull
  4515.  
  4516.  move.w #239,d0
  4517.  move.l FASTBUFFER,a0
  4518.  tst.b fillscrnwater
  4519.  beq nowaterfull
  4520.  bgt oknothalf
  4521.  moveq #119,d0
  4522.  add.l #320*120*2,a0
  4523. oknothalf:
  4524.  
  4525.  bclr.b #1,$bfe001
  4526.  
  4527.  move.l #brightentab+512*4,a2
  4528.  moveq #0,d2
  4529.  
  4530. fw:
  4531.  move.w #287,d1
  4532. fwa:
  4533.  move.b (a0),d2
  4534.  move.w (a2,d2.w*2),(a0)+
  4535.  dbra d1,fwa
  4536.  add.w #32*2,a0
  4537.  dbra d0,fw
  4538.  
  4539. ; move.l frompt,a0
  4540. ; add.l #104*4*60,a0
  4541. ; move.w #31,d0
  4542. ;fw:
  4543. ; move.w d5,d1
  4544. ; move.l a0,a1
  4545. ;fwd:
  4546. ;val SET 104*4*19
  4547. ; REPT 20
  4548. ; and.w #$ff,val(a1)
  4549. ;val SET val-104*4
  4550. ; ENDR
  4551. ; sub.l #104*4*20,a1
  4552. ; dbra d1,fwd
  4553. ; addq #4,a0
  4554. ; dbra d0,fw
  4555. ;
  4556. ; addq #4,a0
  4557. ;
  4558. ; move.w #31,d0
  4559. ;sw:
  4560. ; move.w d5,d1
  4561. ; move.l a0,a1
  4562. ;swd:
  4563. ;val SET 104*4*19
  4564. ; REPT 20
  4565. ; and.w #$ff,val(a1)
  4566. ;val SET val-104*4
  4567. ; ENDR
  4568. ; sub.l #104*4*20,a1
  4569. ; dbra d1,swd
  4570. ; addq #4,a0
  4571. ; dbra d0,sw
  4572. ;
  4573. ; addq #4,a0
  4574. ;
  4575. ; move.w #31,d0
  4576. ;tw:
  4577. ; move.w d5,d1
  4578. ; move.l a0,a1
  4579. ;twd:
  4580. ;val SET 104*4*19
  4581. ; REPT 20
  4582. ; and.w #$ff,val(a1)
  4583. ;val SET val-104*4
  4584. ; ENDR
  4585. ; sub.l #104*4*20,a1
  4586. ; dbra d1,twd
  4587. ; addq #4,a0
  4588. ; dbra d0,tw
  4589. ;
  4590.  rts
  4591.  
  4592. nowaterfull:
  4593.  bset.b #1,$bfe001
  4594.  rts
  4595.  
  4596. prot9: dc.w 0
  4597.  
  4598. TempBuffer: ds.l 100 
  4599.  
  4600. ClipTable: ds.l 30
  4601. EndOfClipPt: dc.l 0
  4602. DOUPPER: dc.w 0
  4603.  
  4604. RealTable:
  4605.  dc.l prot1-78935450
  4606.  dc.l prot2-78935450
  4607.  dc.l prot3-78935450
  4608.  dc.l prot4-78935450
  4609.  dc.l prot5-78935450
  4610.  dc.l prot6-78935450
  4611.  dc.l prot7-78935450
  4612.  dc.l prot8-78935450
  4613.  dc.l prot9-78935450
  4614.  dc.l protA-78935450
  4615.  
  4616. dothisroom
  4617.  
  4618.  move.w (a0)+,d0
  4619.  move.w d0,currzone
  4620.  move.w d0,d1
  4621.  muls #40,d1
  4622.  add.l #BIGMAP,d1
  4623.  move.l d1,BIGPTR
  4624.  move.w d0,d1
  4625.  ext.l d1
  4626.  asl.w #2,d1
  4627.  add.l #COMPACTMAP,d1
  4628.  move.l d1,COMPACTPTR
  4629.  add.l #4,d1
  4630.  cmp.l LASTZONE,d1
  4631.  ble.s .nochange
  4632.  move.l d1,LASTZONE
  4633. .nochange:
  4634.  
  4635.  move.l #ZoneBrightTable,a1
  4636.  move.l (a1,d0.w*4),d1
  4637.  tst.b DOUPPER
  4638.  bne.s .okbot
  4639.  swap d1
  4640. .okbot:
  4641.  move.w d1,ZoneBright
  4642.  
  4643. polyloop:
  4644.  move.w (a0)+,d0
  4645.  move.w d0,WALLIDENT
  4646.  and.w #$ff,d0
  4647.  tst.b d0
  4648.  blt jumpoutofloop
  4649.  beq itsawall
  4650.  cmp.w #3,d0
  4651.  beq itsasetclip
  4652.  blt itsafloor
  4653.  cmp.w #4,d0
  4654.  beq itsanobject
  4655.  cmp.w #5,d0
  4656.  beq itsanarc
  4657.  cmp.w #6,d0
  4658.  beq itsalightbeam
  4659.  cmp.w #7,d0
  4660.  beq.s itswater
  4661.  cmp.w #9,d0
  4662.  ble itsachunkyfloor
  4663.  cmp.w #11,d0
  4664.  ble itsabumpyfloor
  4665.  cmp.w #12,d0
  4666.  beq.s itsbackdrop
  4667.  cmp.w #13,d0
  4668.  beq.s itsaseewall
  4669.  
  4670.  bra polyloop
  4671.  
  4672. itsaseewall:
  4673.  st seethru
  4674.  jsr itsawalldraw
  4675.  bra polyloop
  4676.  
  4677. itsbackdrop:
  4678.  jsr putinbackdrop
  4679.  bra polyloop
  4680.  
  4681. itswater:
  4682.  PROTHCHECK
  4683.  move.w #2,SMALLIT
  4684.  move.w #3,d0
  4685.  clr.b gourfloor
  4686.  move.l #FloorLine,LineToUse
  4687.  st usewater
  4688.  clr.b usebumps
  4689.  jsr itsafloordraw
  4690.  bra polyloop
  4691.  
  4692. itsanarc:
  4693.  jsr CurveDraw
  4694.  bra polyloop
  4695.  
  4696. itsanobject:
  4697.  jsr ObjDraw
  4698.  bra polyloop
  4699.  
  4700. itsalightbeam:
  4701.  jsr LightDraw
  4702.  bra polyloop
  4703.  
  4704. itsabumpyfloor:
  4705.  move.w #1,SMALLIT
  4706.  sub.w #9,d0
  4707.  st usebumps
  4708.  st smoothbumps
  4709.  clr.b usewater
  4710.  move.l #BumpLine,LineToUse
  4711.  jsr itsafloordraw
  4712.  bra polyloop
  4713.  
  4714. itsachunkyfloor:
  4715.  move.w #1,SMALLIT
  4716.  subq.w #7,d0
  4717.  st usebumps
  4718.  sub.w #12,topclip
  4719. ; add.w #10,botclip
  4720.  clr.b smoothbumps
  4721.  clr.b usewater
  4722.  move.l #BumpLine,LineToUse
  4723.  jsr itsafloordraw
  4724.  add.w #12,topclip
  4725. ; sub.w #10,botclip
  4726.  bra polyloop 
  4727.  
  4728. itsafloor:
  4729.  
  4730.  move.l PointBrightsPtr,FloorPtBrights
  4731.  
  4732.  move.w currzone,d1
  4733.  muls #80,d1
  4734.  
  4735.  cmp.w #2,d0
  4736.  bne.s .nfl
  4737.  add.l #2,d1
  4738. .nfl
  4739.  add.l d1,FloorPtBrights
  4740.  
  4741.  move.w #1,SMALLIT
  4742.  
  4743.  movem.l a0/d0,-(a7)
  4744.  move.l $4.w,a6
  4745.  jsr _LVOSuperState(a6)
  4746.  move.l d0,SSTACK
  4747.  movem.l (a7)+,a0/d0
  4748.  
  4749.  move.l THEFLOORLINE,LineToUse
  4750. * 1,2 = floor/roof
  4751.  clr.b usewater
  4752.  clr.b usebumps
  4753.  move.b GOURSEL,gourfloor    
  4754.  jsr itsafloordraw
  4755.  move.l a0,-(a7)
  4756.  move.l $4.w,a6
  4757.  move.l SSTACK,d0
  4758.  jsr _LVOUserState(a6)
  4759.  move.l (a7)+,a0
  4760.  bra polyloop
  4761. itsasetclip:
  4762.  bra polyloop
  4763. itsawall:
  4764.  clr.b seethru
  4765. ; move.l #stripbuffer,a1
  4766.  jsr itsawalldraw
  4767.  bra polyloop
  4768.  
  4769. jumpoutofloop:
  4770.  rts
  4771.  
  4772. LASTZONE: dc.l 0
  4773. COMPACTPTR: dc.l 0
  4774. BIGPTR: dc.l 0
  4775. WALLIDENT: dc.w 0
  4776. SMALLIT: dc.w 0
  4777. GOURSEL: dc.w 0
  4778. ThisRoomToDraw: dc.l 0,0
  4779. SplitHeight: dc.l 0
  4780.  
  4781.  include "ab3:source_4000/OrderZones"
  4782.  
  4783. ReadMouse:
  4784.  move.l #$dff000,a6
  4785.  clr.l d0
  4786.  clr.l d1
  4787.  move.w $a(a6),d0
  4788.  lsr.w #8,d0
  4789.  ext.l d0
  4790.  move.w d0,d3
  4791.  move.w oldmy,d2
  4792.  sub.w d2,d0
  4793.  
  4794.  cmp.w #127,d0
  4795.  blt nonegy
  4796.  move.w #255,d1
  4797.  sub.w d0,d1
  4798.  move.w d1,d0
  4799.  neg.w d0
  4800. nonegy:
  4801.  
  4802.  cmp.w #-127,d0
  4803.  bge nonegy2
  4804.  move.w #255,d1
  4805.  add.w d0,d1
  4806.  move.w d1,d0
  4807. nonegy2:
  4808.  
  4809.  add.b d0,d2
  4810.  add.w d0,oldy2
  4811.  move.w d2,oldmy
  4812.  move.w d2,d0
  4813.  
  4814.  move.w oldy2,d0
  4815.  move.w d0,ymouse
  4816.  
  4817.  clr.l d0
  4818.  clr.l d1
  4819.  move.w $a(a6),d0
  4820.  ext.w d0
  4821.  ext.l d0
  4822.  move.w d0,d3
  4823.  move.w oldmx,d2
  4824.  sub.w d2,d0
  4825.  
  4826.  cmp.w #127,d0
  4827.  blt nonegx
  4828.  move.w #255,d1
  4829.  sub.w d0,d1
  4830.  move.w d1,d0
  4831.  neg.w d0
  4832. nonegx:
  4833.  
  4834.  cmp.w #-127,d0
  4835.  bge nonegx2
  4836.  move.w #255,d1
  4837.  add.w d0,d1
  4838.  move.w d1,d0
  4839. nonegx2:
  4840.  
  4841.  add.b d0,d2
  4842.  move.w d0,d1
  4843.  move.w d2,oldmx
  4844.  
  4845.  move.w #$0,$dff034
  4846.  
  4847.  add.w d0,oldx2
  4848.  move.w oldx2,d0
  4849.  and.w #2047,d0
  4850.  move.w d0,oldx2
  4851.  
  4852.  asl.w #2,d0
  4853.  sub.w prevx,d0
  4854.  add.w d0,prevx
  4855.  add.w d0,angpos
  4856.  move.w #0,lrs
  4857.  rts
  4858.  
  4859. noturn:
  4860.  
  4861. ; got to move lr instead. 
  4862.  
  4863. ; d1 = speed moved l/r
  4864.  
  4865.  move.w d1,lrs
  4866.  
  4867.  rts
  4868.  
  4869. lrs: dc.w 0
  4870. prevx: dc.w 0
  4871.  
  4872. angpos: dc.w 0
  4873. mang: dc.w 0
  4874. oldymouse: dc.w 0
  4875. xmouse: dc.w 0
  4876. ymouse: dc.w 0
  4877. oldx2: dc.w 0
  4878. oldmx: dc.w 0
  4879. oldmy: dc.w 0
  4880. oldy2: dc.w 0
  4881.  
  4882. MAPON: dc.w $ffff
  4883.  
  4884. RotateLevelPts:
  4885.  
  4886.  tst.b MAPON
  4887.  beq ONLYTHELONELY
  4888.  
  4889.  move.w sinval,d6
  4890.  swap d6
  4891.  move.w cosval,d6
  4892.  move.l Points,a3
  4893.  move.l #Rotated,a1
  4894.  move.l #OnScreen,a2
  4895.  move.w xoff,d4
  4896.  move.w zoff,d5
  4897.  
  4898. ; move.w #$c40,$dff106
  4899. ; move.w #$f00,$dff180
  4900.  
  4901.  move.w NumLevPts,d7
  4902.  
  4903.  tst.b FULLSCR
  4904.  bne BIGALL
  4905.  
  4906. pointrotlop2:
  4907.  move.w (a3)+,d0
  4908.  sub.w d4,d0
  4909.  move.w d0,d2
  4910.  move.w (a3)+,d1
  4911.  sub.w d5,d1
  4912.  muls d6,d2
  4913.  swap d6
  4914.  move.w d1,d3
  4915.  muls d6,d3
  4916.  sub.l d3,d2
  4917.  add.l d2,d2
  4918.  swap d2
  4919.  ext.l d2
  4920.  asl.l #7,d2
  4921.  add.l xwobble,d2
  4922.  move.l d2,(a1)+
  4923.  
  4924.  muls d6,d0
  4925.  swap d6
  4926.  muls d6,d1
  4927.  add.l d0,d1
  4928.  asl.l #1,d1
  4929.  swap d1
  4930. ; ext.l d1
  4931. ; divs #3,d1
  4932.  move.l d1,(a1)+
  4933.  
  4934.  tst.w d1
  4935.  bgt.s ptnotbehind
  4936.  tst.w d2
  4937.  bgt.s onrightsomewhere
  4938.  move.w #0,d2
  4939.  bra putin
  4940. onrightsomewhere:
  4941.  move.w RIGHTX,d2
  4942.  bra putin
  4943. ptnotbehind:
  4944.  
  4945.  divs d1,d2
  4946.  add.w MIDDLEX,d2
  4947. putin:
  4948.  move.w d2,(a2)+
  4949.  
  4950.  dbra d7,pointrotlop2
  4951. outofpointrot:
  4952.   rts
  4953.  
  4954.  
  4955. BIGALL:
  4956.  
  4957. pointrotlop2B:
  4958.  move.w (a3)+,d0
  4959.  sub.w d4,d0
  4960.  move.w d0,d2
  4961.  move.w (a3)+,d1
  4962.  sub.w d5,d1
  4963.  muls d6,d2
  4964.  swap d6
  4965.  move.w d1,d3
  4966.  muls d6,d3
  4967.  sub.l d3,d2
  4968.  add.l d2,d2
  4969.  swap d2
  4970.  ext.l d2
  4971.  asl.l #7,d2
  4972.  add.l xwobble,d2
  4973.  move.l d2,(a1)+
  4974.  
  4975.  muls d6,d0
  4976.  swap d6
  4977.  muls d6,d1
  4978.  add.l d0,d1
  4979.  asl.l #2,d1
  4980.  swap d1
  4981.  ext.l d1
  4982.  divs #3,d1
  4983.  move.l d1,(a1)+
  4984.  
  4985.  tst.w d1
  4986.  bgt.s ptnotbehindB
  4987.  tst.w d2
  4988.  bgt.s onrightsomewhereB
  4989.  move.w #0,d2
  4990.  bra putinB
  4991. onrightsomewhereB:
  4992.  move.w RIGHTX,d2
  4993.  bra putinB
  4994. ptnotbehindB:
  4995.  
  4996.  divs d1,d2
  4997.  add.w MIDDLEX,d2
  4998. putinB:
  4999.  move.w d2,(a2)+
  5000.  
  5001.  dbra d7,pointrotlop2B
  5002.   rts
  5003.  
  5004.  
  5005. ONLYTHELONELY:
  5006.  
  5007.  move.w sinval,d6
  5008.  swap d6
  5009.  move.w cosval,d6
  5010.  
  5011.  move.l PointsToRotatePtr,a0
  5012.  move.l Points,a3
  5013.  move.l #Rotated,a1
  5014.  move.l #OnScreen,a2
  5015.  move.w xoff,d4
  5016.  move.w zoff,d5
  5017.  
  5018. ; move.w #$c40,$dff106
  5019. ; move.w #$f00,$dff180
  5020.  
  5021.  tst.b FULLSCR
  5022.  bne BIGLONELY
  5023.  
  5024. pointrotlop:
  5025.  move.w (a0)+,d7
  5026.  blt outofpointrot
  5027.  
  5028.  move.w (a3,d7*4),d0
  5029.  sub.w d4,d0
  5030.  move.w d0,d2
  5031.  move.w 2(a3,d7*4),d1
  5032.  sub.w d5,d1
  5033.  muls d6,d2
  5034.  swap d6
  5035.  move.w d1,d3
  5036.  muls d6,d3
  5037.  sub.l d3,d2
  5038.  add.l d2,d2
  5039.  swap d2
  5040.  ext.l d2
  5041.  asl.l #7,d2
  5042.  add.l xwobble,d2
  5043.  move.l d2,(a1,d7*8)
  5044.  
  5045.  muls d6,d0
  5046.  swap d6
  5047.  muls d6,d1
  5048.  add.l d0,d1
  5049.  asl.l #1,d1
  5050.  swap d1
  5051. ; ext.l d1
  5052. ; divs #3,d1
  5053.  move.l d1,4(a1,d7*8)
  5054.  
  5055.  tst.w d1
  5056.  bgt.s .ptnotbehind
  5057.  tst.w d2
  5058.  bgt.s .onrightsomewhere
  5059.  move.w #0,d2
  5060.  bra .putin
  5061. .onrightsomewhere:
  5062.  move.w RIGHTX,d2
  5063.  bra .putin
  5064. .ptnotbehind:
  5065.  
  5066.  divs d1,d2
  5067.  add.w MIDDLEX,d2
  5068. .putin:
  5069.  move.w d2,(a2,d7*2)
  5070.  
  5071.  bra pointrotlop
  5072.  
  5073. ; move.w #$c40,$dff106
  5074. ; move.w #$ff0,$dff180
  5075.  
  5076.  rts
  5077.  
  5078. BIGLONELY:
  5079.  
  5080. .pointrotlop:
  5081.  move.w (a0)+,d7
  5082.  blt.s .outofpointrot
  5083.  
  5084.  move.w (a3,d7*4),d0
  5085.  sub.w d4,d0
  5086.  move.w d0,d2
  5087.  move.w 2(a3,d7*4),d1
  5088.  sub.w d5,d1
  5089.  muls d6,d2
  5090.  swap d6
  5091.  move.w d1,d3
  5092.  muls d6,d3
  5093.  sub.l d3,d2
  5094.  add.l d2,d2
  5095.  swap d2
  5096.  ext.l d2
  5097.  asl.l #7,d2
  5098.  add.l xwobble,d2
  5099.  move.l d2,(a1,d7*8)
  5100.  
  5101.  muls d6,d0
  5102.  swap d6
  5103.  muls d6,d1
  5104.  add.l d0,d1
  5105.  asl.l #2,d1
  5106.  swap d1
  5107.  ext.l d1
  5108.  divs #3,d1
  5109.  move.l d1,4(a1,d7*8)
  5110.  
  5111.  tst.w d1
  5112.  bgt.s .ptnotbehind
  5113.  tst.w d2
  5114.  bgt.s .onrightsomewhere
  5115.  move.w #0,d2
  5116.  bra .putin
  5117. .onrightsomewhere:
  5118.  move.w RIGHTX,d2
  5119.  bra .putin
  5120. .ptnotbehind:
  5121.  
  5122.  divs d1,d2
  5123.  add.w MIDDLEX,d2
  5124. .putin:
  5125.  move.w d2,(a2,d7*2)
  5126.  
  5127.  bra .pointrotlop
  5128.  
  5129. .outofpointrot:
  5130. ; move.w #$c40,$dff106
  5131. ; move.w #$ff0,$dff180
  5132.  
  5133.  rts
  5134.  
  5135.  
  5136. PLR1_ObjDists
  5137.  ds.w 250
  5138. PLR2_ObjDists
  5139.  ds.w 250
  5140.  
  5141. CalcPLR1InLine:
  5142.  
  5143.  move.w PLR1_sinval,d5
  5144.  move.w PLR1_cosval,d6
  5145.  move.l ObjectData,a4
  5146.  move.l ObjectPoints,a0
  5147.  move.w NumObjectPoints,d7
  5148.  move.l #PLR1_ObsInLine,a2
  5149.  move.l #PLR1_ObjDists,a3
  5150.  
  5151. .objpointrotlop:
  5152.  
  5153.  move.w (a0),d0
  5154.  sub.w PLR1_xoff,d0
  5155.  move.w 4(a0),d1
  5156.  addq #8,a0
  5157.  
  5158.  tst.w 12(a4)
  5159.  blt .noworkout
  5160.  
  5161.  moveq #0,d2
  5162.  move.b 16(a4),d2
  5163.  move.l #ColBoxTable,a6
  5164.  lea (a6,d2.w*8),a6
  5165.  
  5166.  sub.w PLR1_zoff,d1
  5167.  move.w d0,d2
  5168.  muls d6,d2
  5169.  move.w d1,d3
  5170.  muls d5,d3
  5171.  sub.l d3,d2
  5172.  add.l d2,d2
  5173.  
  5174.  bgt.s .okh
  5175.  neg.l d2
  5176. .okh:
  5177.  swap d2
  5178.  
  5179.  muls d5,d0
  5180.  muls d6,d1
  5181.  add.l d0,d1
  5182.  asl.l #2,d1
  5183.  swap d1
  5184.  moveq #0,d3
  5185.  
  5186.  tst.w d1
  5187.  ble.s .notinline
  5188.  asr.w #1,d2
  5189.  cmp.w (a6),d2
  5190.  bgt.s .notinline
  5191.  
  5192.  st d3
  5193. .notinline
  5194.  move.b d3,(a2)+
  5195.  
  5196.  move.w d1,(a3)+
  5197.  
  5198.  add.w #64,a4
  5199.  dbra d7,.objpointrotlop
  5200.  
  5201.  rts
  5202.  
  5203. .noworkout:
  5204.  move.b #0,(a2)+
  5205.  move.w #0,(a3)+
  5206.  add.w #64,a4
  5207.  dbra d7,.objpointrotlop
  5208.  rts
  5209.  
  5210.  
  5211. CalcPLR2InLine:
  5212.  
  5213.  move.w PLR2_sinval,d5
  5214.  move.w PLR2_cosval,d6
  5215.  move.l ObjectData,a4
  5216.  move.l ObjectPoints,a0
  5217.  move.w NumObjectPoints,d7
  5218.  move.l #PLR2_ObsInLine,a2
  5219.  move.l #PLR2_ObjDists,a3
  5220.  
  5221. .objpointrotlop:
  5222.  
  5223.  move.w (a0),d0
  5224.  sub.w PLR2_xoff,d0
  5225.  move.w 4(a0),d1
  5226.  addq #8,a0
  5227.  
  5228.  tst.w 12(a4)
  5229.  blt .noworkout
  5230.  
  5231.  moveq #0,d2
  5232.  move.b 16(a4),d2
  5233.  move.l #ColBoxTable,a6
  5234.  lea (a6,d2.w*8),a6
  5235.  
  5236.  sub.w PLR2_zoff,d1
  5237.  move.w d0,d2
  5238.  muls d6,d2
  5239.  move.w d1,d3
  5240.  muls d5,d3
  5241.  sub.l d3,d2
  5242.  add.l d2,d2
  5243.  
  5244.  bgt.s .okh
  5245.  neg.l d2
  5246. .okh:
  5247.  swap d2
  5248.  
  5249.  muls d5,d0
  5250.  muls d6,d1
  5251.  add.l d0,d1
  5252.  asl.l #2,d1
  5253.  swap d1
  5254.  moveq #0,d3
  5255.  
  5256.  tst.w d1
  5257.  ble.s .notinline
  5258.  asr.w #1,d2
  5259.  cmp.w (a6),d2
  5260.  bgt.s .notinline
  5261.  
  5262.  st d3
  5263. .notinline
  5264.  move.b d3,(a2)+
  5265.  
  5266.  move.w d1,(a3)+
  5267.  
  5268.  add.w #64,a4
  5269.  dbra d7,.objpointrotlop
  5270.  
  5271.  rts
  5272.  
  5273. .noworkout:
  5274.  move.w #0,(a3)+
  5275.  move.b #0,(a2)+
  5276.  add.w #64,a4
  5277.  dbra d7,.objpointrotlop
  5278.  rts
  5279.  
  5280.  
  5281. RotateObjectPts:
  5282.  
  5283.  move.w sinval,d5
  5284.  move.w cosval,d6
  5285.  
  5286.  move.l ObjectData,a4
  5287.  move.l ObjectPoints,a0
  5288.  move.w NumObjectPoints,d7
  5289.  move.l #ObjRotated,a1
  5290.  
  5291.  tst.b FULLSCR
  5292.  bne BIGOBJPTS
  5293.  
  5294. .objpointrotlop:
  5295.  
  5296.  move.w (a0),d0
  5297.  sub.w xoff,d0
  5298.  move.w 4(a0),d1
  5299.  addq #8,a0
  5300.  
  5301.  tst.w 12(a4)
  5302.  blt .noworkout
  5303.  
  5304.  sub.w zoff,d1
  5305.  move.w d0,d2
  5306.  muls d6,d2
  5307.  move.w d1,d3
  5308.  muls d5,d3
  5309.  sub.l d3,d2
  5310.  
  5311.  
  5312.  add.l d2,d2
  5313.  swap d2
  5314.  move.w d2,(a1)+
  5315.  
  5316.  muls d5,d0
  5317.  muls d6,d1
  5318.  add.l d0,d1
  5319.  asl.l #1,d1
  5320.  swap d1
  5321. ; ext.l d1
  5322. ; divs #3,d1
  5323.  moveq #0,d3
  5324.  
  5325.  move.w d1,(a1)+
  5326.  ext.l d2
  5327.  asl.l #7,d2
  5328.  add.l xwobble,d2
  5329.  move.l d2,(a1)+
  5330.  sub.l xwobble,d2
  5331.  
  5332.  add.w #64,a4
  5333.  dbra d7,.objpointrotlop
  5334.  
  5335.  rts
  5336.  
  5337. .noworkout:
  5338.   move.l #0,(a1)+
  5339.   move.l #0,(a1)+
  5340.   add.w #64,a4
  5341.   dbra d7,.objpointrotlop
  5342.   rts
  5343.   
  5344. BIGOBJPTS:
  5345.  
  5346. .objpointrotlop:
  5347.  
  5348.  move.w (a0),d0
  5349.  sub.w xoff,d0
  5350.  move.w 4(a0),d1
  5351.  addq #8,a0
  5352.  
  5353.  tst.w 12(a4)
  5354.  blt .noworkout
  5355.  
  5356.  sub.w zoff,d1
  5357.  move.w d0,d2
  5358.  muls d6,d2
  5359.  move.w d1,d3
  5360.  muls d5,d3
  5361.  sub.l d3,d2
  5362.  
  5363.  
  5364.  add.l d2,d2
  5365.  swap d2
  5366.  move.w d2,(a1)+
  5367.  
  5368.  muls d5,d0
  5369.  muls d6,d1
  5370.  add.l d0,d1
  5371.  asl.l #2,d1
  5372.  swap d1
  5373.  ext.l d1
  5374.  divs #3,d1
  5375.  moveq #0,d3
  5376.  
  5377.  move.w d1,(a1)+
  5378.  ext.l d2
  5379.  asl.l #7,d2
  5380.  add.l xwobble,d2
  5381.  move.l d2,(a1)+
  5382.  sub.l xwobble,d2
  5383.  
  5384.  add.w #64,a4
  5385.  dbra d7,.objpointrotlop
  5386.  
  5387.  rts
  5388.  
  5389. .noworkout:
  5390.   move.l #0,(a1)+
  5391.   move.l #0,(a1)+
  5392.   add.w #64,a4
  5393.   dbra d7,.objpointrotlop
  5394.   rts
  5395.  
  5396. LightDraw:
  5397.  
  5398.  move.w (a0)+,d0
  5399.  move.w (a0)+,d1
  5400.  move.l #Rotated,a1
  5401.  move.w 6(a1,d0.w*8),d2
  5402.  ble.s oneendbehind
  5403.  move.w 6(a1,d1.w*8),d3
  5404.  bgt.s bothendsinfront
  5405.  
  5406. oneendbehind:
  5407.  rts
  5408. bothendsinfront:
  5409.  
  5410.  move.l #OnScreen,a2
  5411.  move.w (a2,d0.w*2),d0
  5412.  bge.s okleftend
  5413.  moveq #0,d0
  5414. okleftend:
  5415.  move.w (a2,d1.w*2),d1
  5416.  bgt.s somevis
  5417.  rts
  5418. somevis:
  5419.  cmp.w RIGHTX,d0
  5420.  blt.s somevis2
  5421.  rts
  5422. somevis2:
  5423.  cmp.w RIGHTX,d1
  5424.  blt.s okrightend
  5425.  move.w RIGHTX,d1
  5426.  subq #1,d1
  5427. okrightend:
  5428.  
  5429.  sub.w d0,d1
  5430.  blt.s wrongbloodywayround
  5431.  move.l #brightentab,a4
  5432.  move.l #objintocop,a1
  5433.  lea (a1,d0.w*2),a1
  5434.  
  5435.  move.l frompt,a3
  5436.  move.w #104*4,d6
  5437.  move.w #79,d2
  5438. lacross:
  5439.  move.w d2,d3
  5440.  move.l a3,a2
  5441.  adda.w (a1)+,a2
  5442. ldown:
  5443.  add.w d6,a2
  5444.  move.w (a2),d7
  5445.  move.w (a4,d7.w*2),(a2)
  5446.  dbra d3,ldown
  5447.  dbra d1,lacross
  5448.  
  5449. wrongbloodywayround:
  5450.  
  5451.  rts
  5452.  
  5453. FaceToPlace: dc.w 0
  5454.  
  5455. Cheese:
  5456.  dc.w 4,15
  5457.  
  5458. FacesList:
  5459.  dc.w 0,4*4
  5460.  dc.w 1,2*4
  5461.  dc.w 0,2*4
  5462.  dc.w 2,2*4
  5463.  dc.w 0,2*4
  5464.  dc.w 1,3*4
  5465.  dc.w 0,2*4
  5466.  dc.w 2,3*4
  5467.  dc.w 0,5*4
  5468.  dc.w 1,2*4
  5469.  dc.w 0,2*4
  5470.  dc.w 2,2*4
  5471.  dc.w 0,2*4
  5472.  dc.w 1,2*4
  5473.  dc.w 0,2*4
  5474.  dc.w 2,3*4
  5475.  dc.w 0,1*4
  5476.  dc.w 1,3*4
  5477.  dc.w 0,1*4
  5478.  dc.w 2,3*4
  5479.  dc.w 0,1*4
  5480.  
  5481. EndOfFacesList:
  5482.  
  5483. FacesPtr:
  5484.  dc.l FacesList
  5485. FacesCounter:
  5486.  dc.w 0
  5487. Expression:
  5488.  dc.w 0
  5489.  
  5490. PlaceFace:
  5491.  
  5492.  move.w FacesCounter,d0
  5493.  subq #1,d0
  5494.  bgt.s NoNewFace
  5495.  
  5496.  move.l FacesPtr,a0
  5497.  
  5498.  move.w 2(a0),d0
  5499.  move.w (a0),Expression
  5500.  addq #4,a0
  5501.  cmp.l #EndOfFacesList,a0
  5502.  blt.s NotFirstFace
  5503.  
  5504.  move.l #FacesList,a0
  5505.  
  5506. NotFirstFace
  5507.  move.l a0,FacesPtr
  5508.  
  5509. NoNewFace:
  5510.  
  5511.  move.w d0,FacesCounter
  5512.  
  5513.  Move.w FaceToPlace,d0
  5514.  muls #5,d0
  5515.  add.w Expression,d0
  5516.  move.l #FacePlace+10,a0
  5517.  move.l #Faces,a1
  5518.  muls #(4*32*5),d0
  5519.  adda.w d0,a1
  5520.  move.w #4,d0
  5521.  move.w #24,d1
  5522.  
  5523.  move.w #4,d3
  5524. bitplaneloop:
  5525.  move.w #31,d2
  5526. PlaceFaceToPlaceInFacePlaceLoop:
  5527.  move.l (a1),(a0)
  5528.  adda.w d0,a1
  5529.  adda.w d1,a0
  5530.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  5531.  dbra d3,bitplaneloop
  5532.  
  5533.  rts
  5534.  
  5535. Energy:
  5536.  dc.w 191
  5537. OldEnergy:
  5538.  dc.w 191
  5539. Ammo: dc.w 63
  5540. OldAmmo: dc.w 63
  5541.  
  5542. FullEnergy:
  5543.  move.w #127,Energy
  5544.  move.w #127,OldEnergy
  5545.  move.l #health,a0
  5546.  move.l #borders,a1
  5547.  add.l #25*8*2+6,a1
  5548.  lea 2592(a1),a2
  5549.  move.w #127,d0
  5550. PutInFull:
  5551.  move.b (a0)+,(a1)
  5552.  move.b (a0)+,8(a1)
  5553.  add.w #16,a1
  5554.  move.b (a0)+,(a2)
  5555.  move.b (a0)+,8(a2)
  5556.  add.w #16,a2
  5557.  dbra d0,PutInFull
  5558.  
  5559.  rts
  5560.  
  5561. EnergyBar:
  5562.  
  5563.  move.w Energy,d0
  5564.  bgt.s .noeneg
  5565.  move.w #0,d0
  5566. .noeneg:
  5567.  move.w d0,Energy
  5568.  
  5569.  cmp.w OldEnergy,d0
  5570.  bne.s gottochange
  5571.  
  5572. NoChange
  5573.  rts
  5574.  
  5575. gottochange:
  5576.   
  5577.  blt LessEnergy
  5578.  cmp.w #127,Energy
  5579.  blt.s NotMax
  5580.  move.w #127,Energy
  5581. NotMax:
  5582.  
  5583.  move.w Energy,d0
  5584.  move.w OldEnergy,d2
  5585.  sub.w d0,d2
  5586.  beq.s NoChange    
  5587.  neg.w d2
  5588.  
  5589.  move.w #127,d3
  5590.  sub.w d0,d3
  5591.  
  5592.  move.l #health,a0
  5593.  lea (a0,d3.w*4),a0
  5594.  move.l #borders+25*16+6,a1
  5595.  lsl.w #4,d3
  5596.  add.w d3,a1
  5597.  lea 2592(a1),a2
  5598.  
  5599. EnergyRise:
  5600.  move.b (a0)+,(a1)
  5601.  move.b (a0)+,8(a1)
  5602.  add.w #16,a1
  5603.  move.b (a0)+,(a2)
  5604.  move.b (a0)+,8(a2)
  5605.  add.w #16,a2
  5606.  subq #1,d2
  5607.  bgt.s EnergyRise
  5608.  
  5609.  move.w Energy,OldEnergy
  5610.  
  5611.  rts 
  5612.  
  5613. LessEnergy: 
  5614.  move.w OldEnergy,d2
  5615.  sub.w d0,d2
  5616.  
  5617.  move.w #127,d3
  5618.  sub.w OldEnergy,d3
  5619.  
  5620.  move.l #borders+25*16+6,a1
  5621.  asl.w #4,d3
  5622.  add.w d3,a1
  5623.  lea 2592(a1),a2
  5624.  
  5625. EnergyDrain:
  5626.  move.b #0,(a1)
  5627.  move.b #0,8(a1)
  5628.  move.b #0,(a2)
  5629.  move.b #0,8(a2)
  5630.  add.w #16,a1
  5631.  add.w #16,a2
  5632.  subq #1,d2
  5633.  bgt.s EnergyDrain
  5634.  
  5635.  move.w Energy,OldEnergy
  5636.  
  5637.  rts 
  5638.  
  5639. AmmoBar:
  5640.  
  5641.  move.w Ammo,d0
  5642.  cmp.w OldAmmo,d0
  5643.  bne.s .gottochange
  5644.  
  5645. .NoChange
  5646.  rts
  5647.  
  5648. .gottochange:
  5649.   
  5650.  blt LessAmmo
  5651.  cmp.w #63,Ammo
  5652.  blt.s .NotMax
  5653.  move.w #63,Ammo
  5654. .NotMax:
  5655.  
  5656.  move.w Ammo,d0
  5657.  move.w OldAmmo,d2
  5658.  sub.w d0,d2
  5659.  beq.s .NoChange
  5660.  neg.w d2
  5661.  
  5662.  move.w #63,d3
  5663.  sub.w d0,d3
  5664.  
  5665.  move.l #Ammunition,a0
  5666.  lea (a0,d3.w*8),a0
  5667.  move.l #borders+5184+25*16+1,a1
  5668.  lsl.w #5,d3
  5669.  add.w d3,a1
  5670.  lea 2592(a1),a2
  5671.  
  5672. AmmoRise:
  5673.  move.b (a0)+,(a1)
  5674.  move.b (a0)+,8(a1)
  5675.  add.w #16,a1
  5676.  move.b (a0)+,(a2)
  5677.  move.b (a0)+,8(a2)
  5678.  add.w #16,a2
  5679.  move.b (a0)+,(a1)
  5680.  move.b (a0)+,8(a1)
  5681.  add.w #16,a1
  5682.  move.b (a0)+,(a2)
  5683.  move.b (a0)+,8(a2)
  5684.  add.w #16,a2
  5685.  subq #1,d2
  5686.  bgt.s AmmoRise
  5687.  
  5688.  move.w Ammo,OldAmmo
  5689.  
  5690.  rts 
  5691.  
  5692.  
  5693. LessAmmo: 
  5694.  move.w OldAmmo,d2
  5695.  sub.w d0,d2
  5696.  
  5697.  move.w #63,d3
  5698.  sub.w OldAmmo,d3
  5699.  
  5700.  move.l #borders++5184+25*16+1,a1
  5701.  asl.w #5,d3
  5702.  add.w d3,a1
  5703.  lea 2592(a1),a2
  5704.  
  5705. AmmoDrain:
  5706.  move.b #0,(a1)
  5707.  move.b #0,8(a1)
  5708.  move.b #0,(a2)
  5709.  move.b #0,8(a2)
  5710.  add.w #16,a1
  5711.  add.w #16,a2
  5712.  move.b #0,(a1)
  5713.  move.b #0,8(a1)
  5714.  move.b #0,(a2)
  5715.  move.b #0,8(a2)
  5716.  add.w #16,a1
  5717.  add.w #16,a2
  5718.  subq #1,d2
  5719.  bgt.s AmmoDrain
  5720.  
  5721.  move.w Ammo,OldAmmo
  5722.  
  5723.  rts 
  5724.  
  5725. nulop:
  5726.  move.w #$0010,$dff000+intreq
  5727.  rte
  5728.  
  5729. doanything: dc.w 0
  5730.  
  5731. end:
  5732. ;     _break #0
  5733.  
  5734.  clr.b dosounds
  5735.  clr.b doanything
  5736.  
  5737.  move.w PLR1_energy,Energy
  5738.  cmp.b #'s',mors
  5739.  bne.s .notsl
  5740.  move.w PLR2_energy,Energy
  5741. .notsl:
  5742.  
  5743.  bsr EnergyBar
  5744.  
  5745.  move.l drawpt,d0
  5746.  move.l olddrawpt,drawpt
  5747.  move.l d0,olddrawpt
  5748.  move.l d0,$dff084
  5749.  
  5750.  
  5751.  cmp.b #'b',Prefsfile+3
  5752.  bne.s .noback
  5753.  jsr mt_end
  5754. .noback
  5755.  tst.w Energy
  5756.  bgt.s wevewon
  5757.  
  5758.  move.l #gameover,mt_data
  5759.  st UseAllChannels
  5760.  clr.b reachedend
  5761.  jsr mt_init
  5762. playgameover:
  5763.  move.l #$dff000,a6
  5764. waitfortop2:
  5765.  
  5766.     
  5767.  btst.b #0,intreqrl(a6)
  5768.  beq waitfortop2
  5769.  move.w #$1,intreq(a6)
  5770.  
  5771.     
  5772.  jsr mt_music
  5773.  
  5774.  
  5775.     
  5776.  tst.b reachedend
  5777.  beq.s playgameover
  5778.  
  5779.  bra wevelost
  5780.  
  5781.  
  5782. wevewon:
  5783.  
  5784.  cmp.b #'n',mors
  5785.  bne.s .nonextlev
  5786.  add.w #1,MAXLEVEL
  5787.  st FINISHEDLEVEL
  5788. .nonextlev:
  5789.  
  5790.  move.l #welldone,mt_data
  5791.  st UseAllChannels
  5792.  clr.b reachedend
  5793.  jsr mt_init
  5794. playwelldone:
  5795.  move.l #$dff000,a6
  5796. waitfortop3:
  5797.  btst.b #0,intreqrl(a6)
  5798.  beq waitfortop3
  5799.  move.w #$1,intreq(a6)
  5800.  
  5801.  jsr mt_music
  5802.  
  5803.  tst.b reachedend
  5804.  beq.s playwelldone
  5805.  
  5806. wevelost:
  5807.  
  5808.  PROTICHECK a0
  5809.  
  5810.  jmp closeeverything 
  5811.  
  5812. endnomusic
  5813.  clr.b doanything
  5814.  cmp.b #'b',Prefsfile+3
  5815.  bne.s .noback
  5816.  jsr mt_end
  5817. .noback
  5818. *******************************
  5819. ; cmp.b #'n',mors
  5820. ; bne.s .nonextlev
  5821. ; cmp.w #15,MAXLEVEL
  5822. ; bge.s .nonextlev
  5823. ; add.w #1,MAXLEVEL
  5824. ; st FINISHEDLEVEL
  5825. ;.nonextlev:
  5826. ******************************
  5827.  
  5828.  jmp closeeverything
  5829.  
  5830. do32:
  5831.  move.w #31,d7
  5832.  move.w #$180,d1
  5833. across:
  5834.  move.w d1,(a1)+
  5835.  move.w d1,(a3)+
  5836.  move.w #0,(a1)+ 
  5837.  move.w #0,(a3)+
  5838.  add.w #2,d1
  5839.  dbra d7,across
  5840.  rts
  5841.  
  5842. string:
  5843.     dc.b    'credits',0
  5844.  
  5845. ENDGAMESCROLL:
  5846.  
  5847.     move.l    4.w,a6
  5848.     move.l    #string,d1
  5849.     moveq    #0,d2
  5850.     moveq    #0,d3
  5851.     jsr    _LVOExecute(a6)
  5852.  
  5853. ; include "endscroll.s"
  5854.  
  5855. ***********************************
  5856.  include "ab3:source_4000/CD32JOY"
  5857.  
  5858.  
  5859.  
  5860. *************************************
  5861. * Set left and right clip values
  5862. *************************************
  5863.  
  5864.  
  5865.  
  5866. NEWsetlclip:
  5867.  move.l #OnScreen,a1
  5868.  move.l #Rotated,a2
  5869.  move.l CONNECT_TABLE,a3
  5870.  
  5871.  move.w (a0),d0
  5872.  bge.s .notignoreleft
  5873.  
  5874. ; move.l #0,(a6)
  5875.  
  5876.  bra .leftnotoktoclip
  5877. .notignoreleft:
  5878.  
  5879.  move.w 6(a2,d0*8),d3    ; left z val
  5880.  bgt.s .leftclipinfront
  5881.  addq #2,a0
  5882.  rts
  5883.  
  5884.  tst.w 6(a2,d0*8)
  5885.  bgt.s .leftnotoktoclip
  5886. .ignoreboth:
  5887. ; move.l #0,(a6)
  5888. ; move.l #96*65536,4(a6)
  5889.  move.w #0,leftclip
  5890.  move.w RIGHTX,rightclip
  5891.  addq #8,a6
  5892.  addq #2,a0
  5893.  rts
  5894.  
  5895. .leftclipinfront:
  5896.  move.w (a1,d0*2),d1    ; left x on screen
  5897.  move.w (a0),d2
  5898.  move.w 2(a3,d2.w*4),d2
  5899.  move.w (a1,d2.w*2),d2
  5900.  cmp.w d1,d2
  5901.  bgt.s .leftnotoktoclip
  5902.  
  5903. ; move.w d1,(a6)
  5904. ; move.w d3,2(a6)
  5905.  cmp.w leftclip,d1
  5906.  ble.s .leftnotoktoclip
  5907.  move.w d1,leftclip
  5908. .leftnotoktoclip:
  5909.  
  5910.  addq #2,a0
  5911.  
  5912.  rts
  5913.  
  5914. NEWsetrclip
  5915.  move.l #OnScreen,a1
  5916.  move.l #Rotated,a2
  5917.  move.l CONNECT_TABLE,a3
  5918.  move.w (a0),d0
  5919.  bge.s .notignoreright
  5920. ; move.w #96,4(a6)
  5921. ; move.w #0,6(a6)
  5922.  move.w #0,d4
  5923.  bra .rightnotoktoclip
  5924. .notignoreright:
  5925.  move.w 6(a2,d0*8),d4    ; right z val
  5926.  bgt.s .rightclipinfront
  5927. ; move.w #96,4(a6)
  5928. ; move.w #0,6(a6)
  5929.  bra.s .rightnotoktoclip
  5930.  
  5931. .rightclipinfront:
  5932.  move.w (a1,d0*2),d1    ; right x on screen
  5933.  move.w (a0),d2
  5934.  move.w (a3,d2.w*4),d2
  5935.  move.w (a1,d2.w*2),d2
  5936.  cmp.w d1,d2
  5937.  blt.s .rightnotoktoclip
  5938. ; move.w d1,4(a6)
  5939. ; move.w d4,6(a6)
  5940.  
  5941.  cmp.w rightclip,d1
  5942.  bge.s .rightnotoktoclip
  5943.  addq #1,d1
  5944.  move.w d1,rightclip
  5945. .rightnotoktoclip:
  5946.  addq #8,a6
  5947.  addq #2,a0
  5948.  rts
  5949.  
  5950. FIRSTsetlrclip:
  5951.  move.l #OnScreen,a1
  5952.  move.l #Rotated,a2
  5953.  
  5954.  move.w (a0)+,d0
  5955.  bge.s .notignoreleft
  5956.  bra .leftnotoktoclip
  5957. .notignoreleft:
  5958.  
  5959.  move.w 6(a2,d0*8),d3    ; left z val
  5960.  bgt.s .leftclipinfront
  5961.  
  5962.  move.w (a0),d0
  5963.  blt.s .ignoreboth
  5964.  tst.w 6(a2,d0*8)
  5965.  bgt.s .leftnotoktoclip
  5966. .ignoreboth
  5967.  move.w RIGHTX,rightclip
  5968.  move.w #0,leftclip
  5969.  addq #2,a0
  5970.  rts
  5971.  
  5972. .leftclipinfront:
  5973.  move.w (a1,d0*2),d1    ; left x on screen
  5974.  cmp.w leftclip,d1
  5975.  ble.s .leftnotoktoclip
  5976.  move.w d1,leftclip
  5977. .leftnotoktoclip:
  5978.  
  5979.  move.w (a0)+,d0
  5980.  bge.s .notignoreright
  5981.  move.w #0,d4
  5982.  bra .rightnotoktoclip
  5983. .notignoreright:
  5984.  move.w 6(a2,d0*8),d4    ; right z val
  5985.  ble.s .rightnotoktoclip
  5986.  
  5987. .rightclipinfront:
  5988.  move.w (a1,d0*2),d1    ; right x on screen
  5989.  addq #1,d1
  5990.  cmp.w rightclip,d1
  5991.  bge.s .rightnotoktoclip
  5992.  move.w d1,rightclip
  5993. .rightnotoktoclip:
  5994.  
  5995. ; move.w leftclip,d0
  5996. ; move.w rightclip,d1
  5997. ; cmp.w d0,d1
  5998. ; bge.s .noswap
  5999. ; move.w #192,rightclip
  6000. ; move.w #0,leftclip
  6001. ;.noswap:
  6002.  
  6003.  rts
  6004.  
  6005.  
  6006. leftclip2: dc.w 0
  6007. rightclip2: dc.w 0
  6008. ZoneBright: dc.w 0
  6009.  
  6010. npolys: dc.w 0
  6011.  
  6012. PLR1_fire: dc.b 0
  6013. PLR2_fire: dc.b 0
  6014.  
  6015. *****************************************************
  6016.  
  6017.  
  6018. pastdata:
  6019. ***********************************
  6020. * This routine animates brightnesses.
  6021.  
  6022.  
  6023. liftpt: dc.l liftanimtab
  6024.  
  6025. brightpt:
  6026.  dc.l brightanimtab
  6027.  
  6028.  
  6029. liftanim:
  6030.  rts
  6031.  
  6032. ******************************
  6033.  include "ab3:source_4000/ObjectMove"
  6034.  include "ab3:source_4000/newAnims"
  6035.  include "ab3:source_4000/airoutine.s"
  6036. ******************************
  6037. startpass:
  6038. ; include "ab3:source_4000/password_reloc.s"
  6039. endpass:
  6040.  
  6041. rotanimpt: dc.w 0
  6042. xradd: dc.w 5
  6043. yradd: dc.w 8
  6044. xrpos: dc.w 320
  6045. yrpos: dc.w 320
  6046.  
  6047. rotanim:
  6048.  rts
  6049.  
  6050. option:
  6051.  dc.l 0,0
  6052.  
  6053. ********** WALL STUFF *******************************
  6054.  
  6055.  include "AB3:source_4000/hireswall.s"
  6056.  include "AB3:source_4000/hiresgourwall.s"
  6057.  
  6058. *****************************************************
  6059.  
  6060. ******************************************
  6061. * floor polygon
  6062.  
  6063. numsidestd: dc.w 0
  6064. bottomline: dc.w 0
  6065.  
  6066. checkforwater:
  6067.  tst.b usewater
  6068.  beq.s .notwater
  6069.  
  6070.  move.l Roompt,a1
  6071.  move.w (a1),d7
  6072.  cmp.w currzone,d7
  6073.  bne.s .notwater
  6074.  
  6075.  move.b #$f,fillscrnwater
  6076.  
  6077. .notwater:
  6078.  move.w (a0)+,d6    ; sides-1
  6079.  add.w d6,d6
  6080.  add.w d6,a0
  6081.  add.w #4+6,a0
  6082.  rts
  6083.  
  6084.  rts
  6085.  
  6086. NewCornerBuff:
  6087.  ds.l 100
  6088. CLRNOFLOOR: dc.w 0
  6089.  
  6090. itsafloordraw:
  6091.  
  6092. * If D0 =1 then its a floor otherwise (=2) it's
  6093. * a roof.
  6094.  
  6095.  move.w #0,above
  6096.  move.w (a0)+,d6    ; ypos of poly
  6097.  
  6098.  tst.b usewater
  6099.  beq.s .oknon
  6100.  tst.b DOANYWATER
  6101.  beq dontdrawreturn
  6102. .oknon
  6103.  
  6104.  move.w d6,d7
  6105.  ext.l d7
  6106.  asl.l #6,d7
  6107.  cmp.l TOPOFROOM,d7
  6108.  blt checkforwater
  6109.  cmp.l BOTOFROOM,d7
  6110.  bgt.s dontdrawreturn
  6111.  
  6112.  move.w leftclip,d7
  6113.  cmp.w rightclip,d7
  6114.  bge.s dontdrawreturn
  6115.  
  6116.  move.w botclip,d7
  6117.  sub.w MIDDLEY,d7
  6118.  ble.s dontdrawreturn
  6119.  sub.w flooryoff,d6
  6120.  bgt.s below
  6121.  blt.s aboveplayer
  6122.  
  6123.  tst.b usewater
  6124.  beq.s .notwater
  6125.  
  6126.  move.l Roompt,a1
  6127.  move.w (a1),d7
  6128.  cmp.w currzone,d7
  6129.  
  6130.  bne.s .notwater
  6131.  
  6132.  st fillscrnwater
  6133.  
  6134. .notwater:
  6135.  
  6136.  
  6137. dontdrawreturn:
  6138.  move.w (a0)+,d6    ; sides-1
  6139.  add.w d6,d6
  6140.  add.w d6,a0
  6141.  add.w #4+6,a0
  6142.  rts
  6143. aboveplayer:
  6144.  
  6145.  tst.b usewater
  6146.  beq.s .notwater
  6147.  
  6148.  move.l Roompt,a1
  6149.  move.w (a1),d7
  6150.  cmp.w currzone,d7
  6151.  bne.s .notwater
  6152.  
  6153.  move.b #$f,fillscrnwater
  6154.  
  6155. .notwater:
  6156.  
  6157.  btst #1,d0
  6158.  beq.s dontdrawreturn
  6159.  move.w MIDDLEY,d7
  6160.  sub.w topclip,d7 
  6161.  ble.s dontdrawreturn
  6162.  move.w #1,d0
  6163.  move.w d0,above
  6164.  neg.w d6
  6165. below:
  6166.  btst #0,d0
  6167.  beq.s dontdrawreturn
  6168.  move.w d6,distaddr
  6169.  muls #64,d6
  6170.  move.l d6,ypos
  6171.  ext.l d7
  6172.  divs.l d7,d6        ; zpos of bottom
  6173.             ; visible line
  6174.  
  6175.  cmp.l #32767,d6
  6176.  bgt dontdrawreturn
  6177.             
  6178.  move.w d6,minz
  6179.  move.w d7,bottomline
  6180.  
  6181. ; Go round each point finding out
  6182. ; if it should be visible or not.
  6183.  
  6184.  move.l a0,-(a7)
  6185.  
  6186.  move.w (a0)+,d7    ; number of sides
  6187.  move.l #Rotated,a1
  6188.  move.l #OnScreen,a2
  6189.  move.l #NewCornerBuff,a3
  6190.  moveq #0,d4
  6191.  moveq #0,d5
  6192.  moveq #0,d6
  6193.  clr.b anyclipping
  6194.  
  6195. cornerprocessloop:
  6196.  
  6197.  move.w (a0)+,d0
  6198.  and.w #$fff,d0
  6199.  move.w 6(a1,d0.w*8),d1
  6200.  ble  .canttell
  6201.  
  6202.  move.w (a2,d0.w*2),d3
  6203.  cmp.w leftclip,d3
  6204.  bgt.s .nol
  6205.  st d4
  6206.  st anyclipping
  6207.  bra.s .nos
  6208. .nol:
  6209.  cmp.w rightclip,d3
  6210.  blt.s .nor
  6211.  st d6
  6212.  st anyclipping
  6213.  bra.s .nos
  6214. .nor:
  6215.  st d5
  6216. .nos:
  6217.  bra .cantell
  6218.  
  6219. .canttell:
  6220.  st d5
  6221.  st anyclipping
  6222.  
  6223. .cantell:
  6224.  
  6225.  
  6226.  dbra d7,cornerprocessloop
  6227.  
  6228.  move.l (a7)+,a0
  6229.  tst.b d5
  6230.  bne.s somefloortodraw
  6231.  eor.b d4,d6
  6232.  bne dontdrawreturn
  6233.  
  6234. somefloortodraw:
  6235.  
  6236.  tst.b gourfloor
  6237.  bne goursides
  6238.  
  6239.  move.w #300,top
  6240.  move.w #-1,bottom
  6241.  move.w #0,drawit
  6242.  move.l #Rotated,a1
  6243.  move.l #OnScreen,a2
  6244.  move.w (a0)+,d7    ; no of sides
  6245. sideloop:
  6246.  move.w minz,d6
  6247.  move.w (a0)+,d1
  6248.  move.w (a0),d3
  6249.  and.w #$fff,d1
  6250.  and.w #$fff,d3
  6251.  
  6252.  move.w 6(a1,d1*8),d4    ;first z
  6253.  cmp.w d6,d4
  6254.  bgt firstinfront
  6255.  move.w 6(a1,d3*8),d5    ; sec z
  6256.  cmp.w d6,d5
  6257.  ble bothbehind
  6258. ** line must be on left and partially behind.
  6259.  sub.w d5,d4
  6260.  move.l (a1,d1*8),d0
  6261.  sub.l (a1,d3*8),d0
  6262.  asr.l #7,d0
  6263.  sub.w d5,d6
  6264.  muls d6,d0    ; new x coord
  6265.  divs d4,d0
  6266.  ext.l d0
  6267.  asl.l #7,d0
  6268.  
  6269.  add.l (a1,d3*8),d0
  6270.  move.w minz,d4
  6271.  move.w (a2,d3*2),d2
  6272.  divs d4,d0
  6273.  add.w MIDDLEX,d0
  6274.  move.l ypos,d3
  6275.  divs d5,d3
  6276.  move.w bottomline,d1 
  6277.  bra lineclipped
  6278.  
  6279. firstinfront:
  6280.  move.w 6(a1,d3*8),d5    ; sec z
  6281.  cmp.w d6,d5
  6282.  bgt bothinfront
  6283. ** line must be on right and partially behind.
  6284.  sub.w d4,d5    ; dz
  6285.  move.l (a1,d3*8),d2
  6286.  sub.l (a1,d1*8),d2    ; dx
  6287.  sub.w d4,d6
  6288.  asr.l #7,d2
  6289.  muls d6,d2    ; new x coord
  6290.  divs d5,d2
  6291.  ext.l d2
  6292.  asl.l #7,d2
  6293.  add.l (a1,d1*8),d2
  6294.  move.w minz,d5
  6295.  move.w (a2,d1*2),d0
  6296.  divs d5,d2
  6297.  add.w MIDDLEX,d2
  6298.  move.l ypos,d1
  6299.  divs d4,d1
  6300.  move.w bottomline,d3 
  6301.  bra lineclipped
  6302.  
  6303. bothinfront:
  6304.  
  6305. * Also, usefully enough, both are on-screen
  6306. * so no bottom clipping is needed.
  6307.  
  6308.  move.w (a2,d1*2),d0    ; first x
  6309.  move.w (a2,d3*2),d2    ; second x
  6310.  move.l ypos,d1
  6311.  move.l d1,d3
  6312.  divs d4,d1        ; first y
  6313.  divs d5,d3        ; second y
  6314. lineclipped:
  6315.  move.l #rightsidetab,a3
  6316.  cmp.w d1,d3
  6317.  beq lineflat
  6318.  st drawit
  6319.  bgt lineonright
  6320.  move.l #leftsidetab,a3
  6321.  exg d1,d3
  6322.  exg d0,d2
  6323.  
  6324.  lea (a3,d1*2),a3
  6325.  
  6326.  cmp.w top(pc),d1
  6327.  bge.s .nonewtop
  6328.  move.w d1,top
  6329. .nonewtop:
  6330.  cmp.w bottom(pc),d3
  6331.  ble.s .nonewbot
  6332.  move.w d3,bottom
  6333. .nonewbot:
  6334.  
  6335.  sub.w d1,d3    ; dy
  6336.  sub.w d0,d2    ; dx
  6337.  
  6338.  blt .linegoingleft
  6339.  
  6340.  ext.l d2
  6341.  divs d3,d2
  6342.  move.w d2,d6
  6343.  swap d2
  6344.  
  6345. ; moveq #0,d6
  6346. ; sub.w d3,d2
  6347. ; blt.s .noco
  6348. ;.makeco
  6349. ; addq #1,d6
  6350. ; sub.w d3,d2
  6351. ; bge.s .makeco
  6352. ;.noco
  6353. ; add.w d3,d2
  6354.  
  6355.  move.w d3,d4
  6356.  move.w d3,d5
  6357.  subq #1,d5
  6358.  move.w d6,d1
  6359.  addq #1,d1
  6360.  
  6361. .pixlopright:
  6362.  move.w d0,(a3)+
  6363.  sub.w d2,d4
  6364.  bge.s .nobigstep
  6365.  add.w d1,d0
  6366.  add.w d3,d4
  6367.  dbra d5,.pixlopright
  6368.  bra lineflat
  6369. .nobigstep
  6370.  add.w d6,d0
  6371.  dbra d5,.pixlopright
  6372.  bra lineflat
  6373.  
  6374. .linegoingleft:
  6375.  
  6376.  neg.w d2
  6377.  
  6378.  ext.l d2
  6379.  divs d3,d2
  6380.  move.w d2,d6
  6381.  swap d2
  6382.  
  6383.  
  6384. ; moveq #0,d6
  6385. ; sub.w d3,d2
  6386. ; blt.s .nocol
  6387. ;.makecol
  6388. ; addq #1,d6
  6389. ; sub.w d3,d2
  6390. ; bge.s .makecol
  6391. ;.nocol
  6392. ; add.w d3,d2
  6393.  
  6394.  
  6395.  
  6396.  move.w d3,d4
  6397.  move.w d3,d5
  6398.  subq #1,d5
  6399.  
  6400.  move.w d6,d1
  6401.  addq #1,d1
  6402.  
  6403. .pixlopleft:
  6404.  sub.w d2,d4
  6405.  bge.s .nobigstepl
  6406.  sub.w d1,d0
  6407.  add.w d3,d4
  6408.  move.w d0,(a3)+
  6409.  dbra d5,.pixlopleft
  6410.  bra lineflat
  6411.  
  6412. .nobigstepl
  6413.  sub.w d6,d0
  6414.  move.w d0,(a3)+
  6415.  dbra d5,.pixlopleft
  6416.  bra lineflat
  6417.  
  6418. lineonright:
  6419.  
  6420.  lea (a3,d1*2),a3
  6421.  
  6422.  cmp.w top(pc),d1
  6423.  bge.s .nonewtop
  6424.  move.w d1,top
  6425. .nonewtop:
  6426.  cmp.w bottom(pc),d3
  6427.  ble.s .nonewbot
  6428.  move.w d3,bottom
  6429. .nonewbot:
  6430.  
  6431.  sub.w d1,d3    ; dy
  6432.  sub.w d0,d2    ; dx
  6433.  blt .linegoingleft
  6434. ; addq #1,d0
  6435.  ext.l d2
  6436.  divs d3,d2
  6437.  move.w d2,d6
  6438.  swap d2
  6439.  
  6440. ; moveq #0,d6
  6441. ; sub.w d3,d2
  6442. ; blt.s .noco
  6443. ;.makeco
  6444. ; addq #1,d6
  6445. ; sub.w d3,d2
  6446. ; bge.s .makeco
  6447. ;.noco
  6448. ; add.w d3,d2
  6449.  
  6450.  move.w d3,d4
  6451.  move.w d3,d5
  6452.  subq #1,d5
  6453.  move.w d6,d1
  6454.  addq #1,d1
  6455.  
  6456. .pixlopright:
  6457.  sub.w d2,d4
  6458.  bge.s .nobigstep
  6459.  add.w d1,d0
  6460.  add.w d3,d4
  6461.  move.w d0,(a3)+
  6462.  dbra d5,.pixlopright
  6463.  bra lineflat
  6464.  
  6465. .nobigstep
  6466.  add.w d6,d0
  6467.  move.w d0,(a3)+
  6468.  dbra d5,.pixlopright
  6469.  bra lineflat
  6470.  
  6471. .linegoingleft:
  6472. ; addq #1,d0
  6473.  neg.w d2
  6474.  
  6475.  ext.l d2
  6476.  divs d3,d2
  6477.  move.w d2,d6
  6478.  swap d2
  6479.  
  6480.  
  6481. ; moveq #0,d6
  6482. ; sub.w d3,d2
  6483. ; blt.s .nocol
  6484. ;.makecol
  6485. ; addq #1,d6
  6486. ; sub.w d3,d2
  6487. ; bge.s .makecol
  6488. ;.nocol
  6489. ; add.w d3,d2
  6490.  
  6491.  move.w d3,d4
  6492.  move.w d3,d5
  6493.  subq #1,d5
  6494.  move.w d6,d1
  6495.  addq #1,d1
  6496.  
  6497. .pixlopleft:
  6498.  move.w d0,(a3)+
  6499.  sub.w d2,d4
  6500.  bge.s .nobigstepl
  6501.  sub.w d1,d0
  6502.  add.w d3,d4
  6503.  dbra d5,.pixlopleft
  6504.  bra lineflat
  6505.  
  6506. .nobigstepl
  6507.  sub.w d6,d0
  6508.  dbra d5,.pixlopleft
  6509.  
  6510. lineflat:
  6511.  
  6512. bothbehind:
  6513.  dbra d7,sideloop
  6514.  bra pastsides
  6515.  
  6516. fbr: dc.w 0
  6517. sbr: dc.w 0
  6518. FloorPtBrights: dc.l 0
  6519.  
  6520. goursides:
  6521.  
  6522.  move.w #300,top
  6523.  move.w #-1,bottom
  6524.  move.w #0,drawit
  6525.  move.l #Rotated,a1
  6526.  move.l #OnScreen,a2
  6527.  move.w (a0)+,d7    ; no of sides
  6528. sideloopGOUR:
  6529.  move.w minz,d6
  6530.  move.w (a0)+,d1
  6531.  move.w (a0),d3
  6532.  
  6533.  move.w d1,d4
  6534.  move.w d3,d5
  6535.  and.w #$0fff,d1
  6536.  and.w #$0fff,d3
  6537.  
  6538.  rol.w #4,d4
  6539.  rol.w #4,d5
  6540.  and.w #$f,d4
  6541.  and.w #$f,d5
  6542.  
  6543.  move.l FloorPtBrights,a4
  6544.  move.w (a4,d4.w*8),fbr
  6545.  move.w (a4,d5.w*8),sbr
  6546.  
  6547.  move.w 6(a1,d1*8),d4    ;first z
  6548.  cmp.w d6,d4
  6549.  bgt firstinfrontGOUR
  6550.  move.w 6(a1,d3*8),d5    ; sec z
  6551.  cmp.w d6,d5
  6552.  ble bothbehindGOUR
  6553. ** line must be on left and partially behind.
  6554.  sub.w d5,d4
  6555.  
  6556.  move.w fbr,d0
  6557.  sub.w sbr,d0
  6558.  sub.w d5,d6
  6559.  muls d6,d0
  6560.  divs d4,d0
  6561.  add.w sbr,d0
  6562.  move.w d0,fbr
  6563.  
  6564.  move.l (a1,d1*8),d0
  6565.  sub.l (a1,d3*8),d0
  6566.  asr.l #7,d0
  6567.  muls d6,d0    ; new x coord
  6568.  divs d4,d0
  6569.  ext.l d0
  6570.  asl.l #7,d0
  6571.  
  6572.  add.l (a1,d3*8),d0
  6573.  move.w minz,d4
  6574.  move.w (a2,d3*2),d2
  6575.  divs d4,d0
  6576.  add.w MIDDLEX,d0
  6577.  move.l ypos,d3
  6578.  divs d5,d3
  6579.  
  6580.  move.w bottomline,d1 
  6581.  bra lineclippedGOUR
  6582.  
  6583. firstinfrontGOUR:
  6584.  move.w 6(a1,d3*8),d5    ; sec z
  6585.  cmp.w d6,d5
  6586.  bgt bothinfrontGOUR
  6587. ** line must be on right and partially behind.
  6588.  sub.w d4,d5    ; dz
  6589.  
  6590.  move.w sbr,d2
  6591.  sub.w fbr,d2
  6592.  sub.w d4,d6
  6593.  muls d6,d2
  6594.  divs d5,d2
  6595.  add.w fbr,d2
  6596.  move.w d2,sbr
  6597.  
  6598.  move.l (a1,d3*8),d2
  6599.  sub.l (a1,d1*8),d2    ; dx
  6600.  asr.l #7,d2
  6601.  muls d6,d2    ; new x coord
  6602.  divs d5,d2
  6603.  ext.l d2
  6604.  asl.l #7,d2
  6605.  add.l (a1,d1*8),d2
  6606.  move.w minz,d5
  6607.  move.w (a2,d1*2),d0
  6608.  divs d5,d2
  6609.  add.w MIDDLEX,d2
  6610.  move.l ypos,d1
  6611.  divs d4,d1
  6612.  move.w bottomline,d3 
  6613.  bra lineclippedGOUR
  6614.  
  6615. bothinfrontGOUR:
  6616.  
  6617. * Also, usefully enough, both are on-screen
  6618. * so no bottom clipping is needed.
  6619.  
  6620.  move.w (a2,d1*2),d0    ; first x
  6621.  move.w (a2,d3*2),d2    ; second x
  6622.  move.l ypos,d1
  6623.  move.l d1,d3
  6624.  divs d4,d1        ; first y
  6625.  divs d5,d3        ; second y
  6626. lineclippedGOUR:
  6627.  move.l #rightsidetab,a3
  6628.  cmp.w d1,d3
  6629.  bne linenotflatGOUR
  6630.  
  6631. ; move.w fbr,d4
  6632. ; move.w sbr,d5
  6633. ; cmp.w d0,d2
  6634. ; bgt.s .nsw
  6635. ; exg d4,d5
  6636. ;.nsw:
  6637.  
  6638. ; move.l #leftbrighttab,a3
  6639. ; move.w d4,(a3,d3.w)
  6640. ; move.l #rightbrighttab,a3
  6641. ; move.w d5,(a3,d3.w) 
  6642.  bra lineflatGOUR
  6643.  
  6644. linenotflatGOUR
  6645.  st drawit
  6646.  bgt lineonrightGOUR
  6647.  move.l #leftsidetab,a3
  6648.  exg d1,d3
  6649.  exg d0,d2
  6650.  
  6651.  lea (a3,d1*2),a3
  6652.  lea leftbrighttab-leftsidetab(a3),a4
  6653.  
  6654.  cmp.w top(pc),d1
  6655.  bge.s .nonewtop
  6656.  move.w d1,top
  6657. .nonewtop:
  6658.  cmp.w bottom(pc),d3
  6659.  ble.s .nonewbot
  6660.  move.w d3,bottom
  6661. .nonewbot:
  6662.  
  6663.  sub.w d1,d3    ; dy
  6664.  sub.w d0,d2    ; dx
  6665.  
  6666.  blt .linegoingleft
  6667.  
  6668.  ext.l d2
  6669.  divs d3,d2
  6670.  move.w d2,d6
  6671.  swap d2
  6672.  move.w d2,a5
  6673.  
  6674. ; moveq #0,d6
  6675. ; sub.w d3,d2
  6676. ; blt.s .noco
  6677. ;.makeco
  6678. ; addq #1,d6
  6679. ; sub.w d3,d2
  6680. ; bge.s .makeco
  6681. ;.noco
  6682. ; add.w d3,d2
  6683.  
  6684.  move.w d3,d4
  6685.  move.w d3,d5
  6686.  subq #1,d5
  6687.  move.w d6,d1
  6688.  addq #1,d1
  6689.  move.w d1,a6
  6690.  
  6691.  moveq #0,d1
  6692.  move.w sbr,d1
  6693.  move.w fbr,d2
  6694.  sub.w d1,d2
  6695.  ext.l d2
  6696.  asl.w #8,d2
  6697.  asl.w #2,d2
  6698.  divs d3,d2 
  6699.  ext.l d2
  6700.  asl.l #6,d2
  6701.  swap d1
  6702.  
  6703. .pixlopright:
  6704.  move.w d0,(a3)+
  6705.  swap d1
  6706.  move.w d1,(a4)+
  6707.  swap d1
  6708.  add.l d2,d1
  6709.  
  6710.  sub.w a5,d4
  6711.  bge.s .nobigstep
  6712.  add.w a6,d0
  6713.  add.w d3,d4
  6714.  dbra d5,.pixlopright
  6715.  bra lineflatGOUR
  6716. .nobigstep
  6717.  
  6718.  add.w d6,d0
  6719.  dbra d5,.pixlopright
  6720.  bra lineflatGOUR
  6721.  
  6722. .linegoingleft:
  6723.  
  6724.  neg.w d2
  6725.  
  6726.  ext.l d2
  6727.  divs d3,d2
  6728.  move.w d2,d6
  6729.  swap d2
  6730.  
  6731.  
  6732. ; moveq #0,d6
  6733. ; sub.w d3,d2
  6734. ; blt.s .nocol
  6735. ;.makecol
  6736. ; addq #1,d6
  6737. ; sub.w d3,d2
  6738. ; bge.s .makecol
  6739. ;.nocol
  6740. ; add.w d3,d2
  6741.  
  6742.  move.w d3,d4
  6743.  move.w d3,d5
  6744.  subq #1,d5
  6745.  
  6746.  move.w d6,d1
  6747.  addq #1,d1
  6748.  move.w d1,a6
  6749.  move.w d2,a5
  6750.  
  6751.  moveq #0,d1
  6752.  move.w sbr,d1
  6753.  move.w fbr,d2
  6754.  sub.w d1,d2
  6755.  ext.l d2
  6756.  asl.w #8,d2
  6757.  asl.w #2,d2
  6758.  divs d3,d2 
  6759.  ext.l d2
  6760.  asl.l #6,d2
  6761.  swap d1
  6762.  
  6763. .pixlopleft:
  6764.  
  6765.  swap d1
  6766.  move.w d1,(a4)+
  6767.  swap d1
  6768.  add.l d2,d1
  6769.  
  6770.  sub.w a5,d4
  6771.  bge.s .nobigstepl
  6772.  sub.w a6,d0
  6773.  add.w d3,d4
  6774.  move.w d0,(a3)+
  6775.  dbra d5,.pixlopleft
  6776.  bra lineflatGOUR
  6777.  
  6778. .nobigstepl
  6779.  sub.w d6,d0
  6780.  move.w d0,(a3)+
  6781.  dbra d5,.pixlopleft
  6782.  bra lineflatGOUR
  6783.  
  6784. lineonrightGOUR:
  6785.  
  6786.  lea (a3,d1*2),a3
  6787.  
  6788.  lea rightbrighttab-rightsidetab(a3),a4
  6789.  
  6790.  cmp.w top(pc),d1
  6791.  bge.s .nonewtop
  6792.  move.w d1,top
  6793. .nonewtop:
  6794.  cmp.w bottom(pc),d3
  6795.  ble.s .nonewbot
  6796.  move.w d3,bottom
  6797. .nonewbot:
  6798.  
  6799.  sub.w d1,d3    ; dy
  6800.  sub.w d0,d2    ; dx
  6801.  blt .linegoingleft
  6802. ; addq #1,d0
  6803.  ext.l d2
  6804.  divs d3,d2
  6805.  move.w d2,d6
  6806.  swap d2
  6807.  
  6808. ; moveq #0,d6
  6809. ; sub.w d3,d2
  6810. ; blt.s .noco
  6811. ;.makeco
  6812. ; addq #1,d6
  6813. ; sub.w d3,d2
  6814. ; bge.s .makeco
  6815. ;.noco
  6816. ; add.w d3,d2
  6817.  
  6818.  move.w d3,d4
  6819.  move.w d3,d5
  6820.  subq #1,d5
  6821.  move.w d6,d1
  6822.  addq #1,d1
  6823.  
  6824.  move.w d1,a6
  6825.  move.w d2,a5
  6826.  
  6827.  moveq #0,d1
  6828.  move.w fbr,d1
  6829.  move.w sbr,d2
  6830.  sub.w d1,d2
  6831.  ext.l d2
  6832.  asl.w #8,d2
  6833.  asl.w #2,d2
  6834.  divs d3,d2 
  6835.  ext.l d2
  6836.  asl.l #6,d2
  6837.  swap d1
  6838.  
  6839. .pixlopright:
  6840.  
  6841.  swap d1
  6842.  move.w d1,(a4)+
  6843.  swap d1
  6844.  add.l d2,d1
  6845.  
  6846.  sub.w a5,d4
  6847.  bge.s .nobigstep
  6848.  add.w a6,d0
  6849.  add.w d3,d4
  6850.  move.w d0,(a3)+
  6851.  dbra d5,.pixlopright
  6852.  bra lineflatGOUR
  6853.  
  6854. .nobigstep
  6855.  add.w d6,d0
  6856.  move.w d0,(a3)+
  6857.  dbra d5,.pixlopright
  6858.  bra lineflatGOUR
  6859.  
  6860. .linegoingleft:
  6861. ; addq #1,d0
  6862.  neg.w d2
  6863.  
  6864.  ext.l d2
  6865.  divs d3,d2
  6866.  move.w d2,d6
  6867.  swap d2
  6868.  
  6869.  
  6870. ; moveq #0,d6
  6871. ; sub.w d3,d2
  6872. ; blt.s .nocol
  6873. ;.makecol
  6874. ; addq #1,d6
  6875. ; sub.w d3,d2
  6876. ; bge.s .makecol
  6877. ;.nocol
  6878. ; add.w d3,d2
  6879.  
  6880.  move.w d3,d4
  6881.  move.w d3,d5
  6882.  subq #1,d5
  6883.  move.w d6,d1
  6884.  addq #1,d1
  6885.  move.w d1,a6
  6886.  move.w d2,a5
  6887.  
  6888.  moveq #0,d1
  6889.  move.w fbr,d1
  6890.  move.w sbr,d2
  6891.  sub.w d1,d2
  6892.  ext.l d2
  6893.  asl.w #8,d2
  6894.  asl.w #2,d2
  6895.  divs d3,d2 
  6896.  ext.l d2
  6897.  asl.l #6,d2
  6898.  swap d1
  6899.  
  6900. .pixlopleft:
  6901.  
  6902.  swap d1
  6903.  move.w d1,(a4)+
  6904.  swap d1
  6905.  add.l d2,d1
  6906.  
  6907.  move.w d0,(a3)+
  6908.  sub.w a5,d4
  6909.  bge.s .nobigstepl
  6910.  sub.w a6,d0
  6911.  add.w d3,d4
  6912.  dbra d5,.pixlopleft
  6913.  bra lineflatGOUR
  6914.  
  6915. .nobigstepl
  6916.  sub.w d6,d0
  6917.  dbra d5,.pixlopleft
  6918.  
  6919. lineflatGOUR:
  6920.  
  6921. bothbehindGOUR:
  6922.  dbra d7,sideloopGOUR
  6923.  
  6924. pastsides:
  6925.  
  6926.  addq #2,a0
  6927.  
  6928.  move.w #320*2,linedir
  6929.  
  6930. ; move.l FASTBUFFER2,a6
  6931. ; add.l BIGMIDDLEY,a6
  6932. ; move.l a6,REFPTR
  6933.  
  6934.  move.l FASTBUFFER,a6
  6935.  add.l BIGMIDDLEY,a6
  6936.  move.w (a0)+,d6
  6937.  add.w SMALLIT,d6
  6938.  move.w d6,scaleval
  6939.  move.w (a0)+,whichtile
  6940.  move.w (a0)+,d6
  6941.  add.w ZoneBright,d6
  6942.  move.w d6,lighttype
  6943.  move.w above(pc),d6
  6944.  beq groundfloor
  6945. * on ceiling:
  6946.  move.w #-320*2,linedir
  6947.  suba.w #320*2,a6
  6948. groundfloor:
  6949.  
  6950.  move.w xoff,d6
  6951.  move.w zoff,d7
  6952.  add.w xwobxoff,d7
  6953.  add.w xwobzoff,d6
  6954.  ext.l d6
  6955.  ext.l d7
  6956.  
  6957.  tst.b FULLSCR
  6958.  beq.s .shiftit
  6959.  
  6960.  add.l d6,d6
  6961.  add.l d7,d7
  6962.  divs #3,d6
  6963.  divs #3,d7
  6964.  
  6965. .shiftit
  6966.  
  6967. ; divs #3,d6
  6968. ; divs #3,d7
  6969.  asr.w #1,d6
  6970.  asr.w #1,d7
  6971.  swap d6
  6972.  swap d7
  6973.  clr.w d6
  6974.  clr.w d7
  6975.  move.w scaleval(pc),d3
  6976.  beq.s .samescale
  6977.  bgt.s .scaledown
  6978.  neg.w d3
  6979.  asr.l d3,d7
  6980.  asr.l d3,d6
  6981.  bra.s .samescale
  6982. .scaledown:
  6983.  asl.l d3,d6
  6984.  asl.l d3,d7
  6985. .samescale
  6986.  move.l d6,sxoff
  6987.  move.l d7,szoff
  6988.  bra pastscale 
  6989.  
  6990.  asr.l #3,d1
  6991.  asr.l #3,d2
  6992.  asr.l #2,d1
  6993.  asr.l #2,d2
  6994.  asr.l #1,d1
  6995.  asr.l #1,d2
  6996. scaleprogfrom
  6997.  nop
  6998.  nop
  6999.  asl.l #1,d1
  7000.  asl.l #1,d2
  7001.  asl.l #2,d1
  7002.  asl.l #2,d2
  7003.  asl.l #3,d1
  7004.  asl.l #3,d2
  7005.  
  7006. top: dc.w 0
  7007. bottom: dc.w 0
  7008. ypos: dc.l 0
  7009. nfloors: dc.w 0
  7010. lighttype: dc.w 0
  7011. above: dc.w 0 
  7012. linedir: dc.w 0
  7013. distaddr: dc.w 0
  7014.  
  7015. minz: dc.l 0
  7016.  
  7017. leftsidetab:
  7018.  ds.w 512*2
  7019. rightsidetab:
  7020.  ds.w 512*2
  7021. leftbrighttab:
  7022.  ds.w 512*2
  7023. rightbrighttab:
  7024.  ds.w 512*2
  7025.  
  7026. PointBrights:
  7027.  dc.l 0
  7028. CurrentPointBrights:
  7029.  ds.l 2*256*10
  7030.  
  7031. movespd: dc.w 0
  7032. largespd: dc.l 0
  7033. disttobot: dc.w 0
  7034.  
  7035. pastscale:
  7036.  
  7037.  
  7038.  tst.b drawit(pc)
  7039.  beq dontdrawfloor
  7040.  
  7041.  move.l a0,-(a7)
  7042.  
  7043.  move.l #leftsidetab,a4
  7044.  move.w top(pc),d1
  7045.   
  7046.  tst.w above
  7047.  beq.s clipfloor
  7048.  
  7049.  move.w MIDDLEY,d7
  7050.  subq #1,d7
  7051.  sub.w d1,d7
  7052.  move.w d7,disttobot
  7053.  
  7054.  move.w bottom(pc),d7
  7055.  move.w MIDDLEY,d3
  7056.  move.w d3,d4
  7057.  sub.w topclip,d3
  7058.  sub.w botclip,d4
  7059.  cmp.w d3,d1
  7060.  bge predontdrawfloor
  7061.  cmp.w d4,d7
  7062.  blt predontdrawfloor
  7063.  cmp.w d4,d1
  7064.  bge.s .nocliptoproof
  7065.  move.w d4,d1
  7066. .nocliptoproof
  7067.  cmp.w d3,d7
  7068.  blt doneclip
  7069.  move.w d3,d7
  7070.  bra doneclip
  7071.  
  7072. clipfloor:
  7073.  move.w BOTTOMY,d7
  7074.  sub.w MIDDLEY,d7
  7075.  subq #1,d7
  7076.  sub.w d1,d7
  7077.  move.w d7,disttobot
  7078.  
  7079.  move.w bottom(pc),d7
  7080.  move.w botclip,d4
  7081.  sub.w MIDDLEY,d4
  7082.  cmp.w d4,d1
  7083.  bge predontdrawfloor
  7084.  move.w topclip,d3
  7085.  sub.w MIDDLEY,d3
  7086.  cmp.w d3,d1
  7087.  bge.s .nocliptopfloor
  7088.  move.w d3,d1
  7089. .nocliptopfloor 
  7090.  cmp.w d3,d7
  7091.  ble predontdrawfloor
  7092.  cmp.w d4,d7
  7093.  blt.s .noclipbotfloor
  7094.  move.w d4,d7
  7095. .noclipbotfloor:
  7096.  
  7097. doneclip:
  7098.  
  7099.  lea (a4,d1*2),a4
  7100. ; move.l #dists,a2
  7101.  move.w distaddr,d0
  7102.  muls #64,d0
  7103.  move.l d0,a2
  7104. ; muls #25,d0
  7105. ; adda.w d0,a2
  7106. ; lea (a2,d1*2),a2
  7107.  sub.w d1,d7
  7108.  ble predontdrawfloor 
  7109.  move.w d1,d0
  7110.  bne.s .notzero
  7111.  moveq #1,d0
  7112. .notzero
  7113.  muls linedir,d1
  7114.  add.l d1,a6
  7115. ; sub.l d1,REFPTR
  7116.  move.l #floorscalecols,a1
  7117.  move.l LineToUse,a5
  7118.  
  7119.  tst.b gourfloor
  7120.  bne dogourfloor
  7121.  
  7122.  tst.b anyclipping
  7123.  beq dofloornoclip
  7124.  
  7125. dofloor:
  7126. ; move.w (a2)+,d0
  7127.  move.w leftclip,d3
  7128.  move.w rightclip,d4
  7129.  move.w rightsidetab-leftsidetab(a4),d2
  7130.  
  7131.  addq #1,d2
  7132.  cmp.w d3,d2
  7133.  ble.s nodrawline
  7134.  cmp.w d4,d2
  7135.  ble.s noclipright
  7136.  move.w d4,d2
  7137. noclipright:
  7138.  move.w (a4),d1
  7139.  cmp.w d4,d1
  7140.  bge.s nodrawline
  7141.  cmp.w d3,d1
  7142.  bge.s noclipleft
  7143.  move.w d3,d1
  7144. noclipleft:
  7145.  cmp.w d1,d2
  7146.  ble.s nodrawline
  7147.  
  7148.  move.w d1,leftedge
  7149.  move.w d2,rightedge
  7150.  
  7151. ; moveq #0,d1
  7152. ; moveq #0,d3
  7153. ; move.w leftbrighttab-leftsidetab(a4),d1
  7154. ; bge.s .okbl
  7155. ; moveq #0,d1
  7156. ;.okbl:
  7157.  
  7158. ; move.w rightbrighttab-leftsidetab(a4),d3
  7159. ; bge.s .okbr
  7160. ; moveq #0,d3
  7161. ;.okbr:
  7162.  
  7163. ; sub.w d1,d3
  7164. ; asl.w #8,d1
  7165. ; move.l d1,leftbright
  7166. ; swap d3
  7167. ; asr.l #5,d3
  7168. ; divs d5,d3
  7169. ; move.w d3,d5
  7170. ; muls.w d6,d5
  7171. ; asr.l #3,d5
  7172. ; clr.b d5
  7173. ; add.w d5,leftbright+2
  7174.  
  7175. ; ext.l d3
  7176. ; asl.l #5,d3
  7177. ; swap d3
  7178. ; asl.w #8,d3
  7179. ; move.l d3,brightspd
  7180.  
  7181.  move.l a6,a3
  7182.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  7183.  move.l a2,d7
  7184.  divs d0,d7
  7185.  move.w d7,d0
  7186.  jsr (a5)
  7187.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  7188. nodrawline
  7189.  sub.w #1,disttobot
  7190.  move.w linedir(pc),d3
  7191.  adda.w d3,a6
  7192. ; ext.l d3
  7193. ; sub.l d3,REFPTR
  7194.  addq #2,a4
  7195.  addq #1,d0
  7196.  subq #1,d7
  7197.  bgt dofloor
  7198.  
  7199. predontdrawfloor
  7200.  move.l (a7)+,a0
  7201.  
  7202. dontdrawfloor:
  7203.  
  7204.  rts
  7205.  
  7206. anyclipping: dc.w 0
  7207.  
  7208. dofloornoclip:
  7209. ; move.w (a2)+,d0
  7210.  move.w rightsidetab-leftsidetab(a4),d2
  7211.  addq #1,d2
  7212.  move.w (a4)+,d1
  7213.  move.w d1,leftedge
  7214.  move.w d2,rightedge
  7215.  
  7216. ; sub.w d1,d2
  7217.  
  7218. ; moveq #0,d1
  7219. ; moveq #0,d3
  7220. ; move.w leftbrighttab-leftsidetab(a4),d1
  7221. ; bge.s .okbl
  7222. ; moveq #0,d1
  7223. ;.okbl:
  7224.  
  7225. ; move.w rightbrighttab-leftsidetab(a4),d3
  7226. ; bge.s .okbr
  7227. ; moveq #0,d3
  7228. ;.okbr:
  7229.  
  7230. ; sub.w d1,d3
  7231. ; asl.w #8,d1
  7232. ; move.l d1,leftbright
  7233. ; swap d3
  7234. ; asr.l #5,d3
  7235. ; divs d2,d3
  7236. ; ext.l d3
  7237. ; asl.l #5,d3
  7238. ; swap d3
  7239. ; asl.w #8,d3
  7240. ; move.l d3,brightspd
  7241.  
  7242.  move.l a6,a3
  7243.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  7244.  move.l a2,d7
  7245.  divs d0,d7
  7246.  move.w d7,d0
  7247.  jsr (a5)
  7248.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  7249.  sub.w #1,disttobot
  7250.  move.w linedir(pc),d3
  7251.  adda.w d3,a6
  7252. ; ext.l d3
  7253. ; sub.l d3,REFPTR
  7254.  addq #1,d0
  7255.  subq #1,d7
  7256.  bgt dofloornoclip
  7257.  
  7258.  bra predontdrawfloor
  7259.  
  7260. dogourfloor:
  7261.  tst.b anyclipping
  7262.  beq dofloornoclipGOUR
  7263.  
  7264. dofloorGOUR:
  7265. ; move.w (a2)+,d0
  7266.  move.w leftclip,d3
  7267.  move.w rightclip,d4
  7268.  move.w rightsidetab-leftsidetab(a4),d2
  7269.  
  7270.  move.w d2,d5
  7271.  sub.w (a4),d5
  7272.  addq #1,d5
  7273.  moveq #0,d6
  7274.  
  7275.  addq #1,d2
  7276.  cmp.w d3,d2
  7277.  ble nodrawlineGOUR
  7278.  cmp.w d4,d2
  7279.  ble.s nocliprightGOUR
  7280.  move.w d4,d2
  7281. nocliprightGOUR:
  7282.  move.w (a4),d1
  7283.  cmp.w d4,d1
  7284.  bge nodrawlineGOUR
  7285.  cmp.w d3,d1
  7286.  bge.s noclipleftGOUR
  7287.  move.w d3,d6
  7288.  subq #1,d6
  7289.  sub.w d1,d6
  7290.  move.w d3,d1
  7291. noclipleftGOUR:
  7292.  cmp.w d1,d2
  7293.  ble nodrawlineGOUR
  7294.  
  7295.  move.w d1,leftedge
  7296.  move.w d2,rightedge
  7297.  
  7298.  move.l a2,d2
  7299.  divs d0,d2
  7300.  move.w d2,dst
  7301.  asr.w #7,d2
  7302. ; addq #5,d2
  7303. ; add.w lighttype,d2
  7304.  
  7305.  moveq #0,d1
  7306.  moveq #0,d3
  7307.  move.w leftbrighttab-leftsidetab(a4),d1
  7308.  add.w d2,d1
  7309.  bge.s .okbl
  7310.  moveq #0,d1
  7311. .okbl:
  7312. ; asr.w #1,d1
  7313.  cmp.w #31,d1
  7314.  ble.s .okdl
  7315.  move.w #31,d1
  7316. .okdl:
  7317.  
  7318.  move.w rightbrighttab-leftsidetab(a4),d3
  7319.  add.w d2,d3
  7320.  bge.s .okbr
  7321.  moveq #0,d3
  7322. .okbr:
  7323. ; asr.w #1,d3
  7324.  cmp.w #31,d3
  7325.  ble.s .okdr
  7326.  move.w #31,d3
  7327. .okdr:
  7328.  
  7329.  sub.w d1,d3
  7330.  asl.w #8,d1
  7331.  move.w d1,leftbright
  7332.  swap d3
  7333.  tst.l d3
  7334.  bgt.s .OKITSPOSALREADY 
  7335.  neg.l d3
  7336.  asr.l #6,d3
  7337.  divs d5,d3
  7338.  neg.w d3
  7339.  bra.s .OKNOWITSNEG
  7340.  
  7341. .OKITSPOSALREADY
  7342.  asr.l #6,d3
  7343.  divs d5,d3
  7344. .OKNOWITSNEG
  7345.  muls d3,d6
  7346.  add.w #256*4,d6
  7347.  asr.w #2,d6
  7348.  clr.b d6
  7349.  add.w leftbright,d6
  7350.  bge.s .oklbnn
  7351.  moveq #0,d6
  7352. .oklbnn:
  7353.  move.w d6,leftbright
  7354.  
  7355.  ext.l d3
  7356.  asr.l #2,d3
  7357. ; swap d3
  7358. ; asl.w #8,d3
  7359.  move.w d3,brightspd
  7360.  
  7361.  move.l a6,a3
  7362.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  7363.  move.w dst,d0
  7364.  lea floorscalecols,a1
  7365.  move.l floortile,a0
  7366.  adda.w whichtile,a0
  7367.  jsr pastfloorbright
  7368.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  7369. nodrawlineGOUR
  7370.  
  7371.  sub.w #1,disttobot
  7372.  
  7373.  move.w linedir(pc),d3
  7374.  adda.w d3,a6
  7375. ; ext.l d3
  7376. ; sub.l d3,REFPTR
  7377.  addq #2,a4
  7378.  addq #1,d0
  7379.  subq #1,d7
  7380.  bgt dofloorGOUR
  7381.  
  7382. predontdrawfloorGOUR
  7383.  move.l (a7)+,a0
  7384.  
  7385. dontdrawfloorGOUR:
  7386.  
  7387.  rts
  7388.  
  7389. REFPTR: dc.l 0
  7390.  
  7391. dofloornoclipGOUR:
  7392. ; move.w (a2)+,d0
  7393.  move.w rightsidetab-leftsidetab(a4),d2
  7394.  addq #1,d2
  7395.  move.w (a4),d1
  7396.  move.w d1,leftedge
  7397.  move.w d2,rightedge
  7398.  
  7399.  sub.w d1,d2
  7400.  
  7401.  move.l a2,d6
  7402.  divs d0,d6
  7403.  move.w d6,d5
  7404.  asr.w #7,d5
  7405. ; addq #5,d5
  7406. ; add.w lighttype,d5
  7407.  
  7408.  moveq #0,d1
  7409.  moveq #0,d3
  7410.  move.w leftbrighttab-leftsidetab(a4),d1
  7411.  add.w d5,d1
  7412.  bge.s .okbl
  7413.  moveq #0,d1
  7414. .okbl:
  7415. ; asr.w #1,d1
  7416.  cmp.w #31,d1
  7417.  ble.s .okdl
  7418.  move.w #31,d1
  7419. .okdl:
  7420.  
  7421.  move.w rightbrighttab-leftsidetab(a4),d3
  7422.  add.w d5,d3
  7423.  bge.s .okbr
  7424.  moveq #0,d3
  7425. .okbr:
  7426. ; asr.w #1,d3
  7427.  cmp.w #31,d3
  7428.  ble.s .okdr
  7429.  move.w #31,d3
  7430. .okdr:
  7431.  
  7432. ; sub.w d1,d3
  7433. ; asl.w #8,d1
  7434. ; move.l d1,leftbright
  7435. ; swap d3
  7436. ; asr.l #5,d3
  7437. ; divs d2,d3
  7438. ; ext.l d3
  7439. ; asl.l #5,d3
  7440. ; swap d3
  7441. ; asl.w #8,d3
  7442. ; move.l d3,brightspd
  7443.  
  7444.  sub.w d1,d3
  7445.  asl.w #8,d1
  7446.  move.w d1,leftbright
  7447.  swap d3
  7448.  ext.l d2
  7449.  divs.l d2,d3
  7450.  asr.l #8,d3
  7451.  move.w d3,brightspd
  7452.  
  7453.  move.l a6,a3
  7454.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  7455.  move.w d6,d0
  7456.  move.w d0,dst
  7457.  lea floorscalecols,a1
  7458.  move.l floortile,a0
  7459.  adda.w whichtile,a0
  7460.  jsr pastfloorbright
  7461.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  7462.  sub.w #1,disttobot
  7463.  
  7464.  move.w linedir(pc),d3
  7465.  adda.w d3,a6
  7466. ; ext.l d3
  7467. ; sub.l d3,REFPTR
  7468.  
  7469.  addq #2,a4
  7470.  addq #1,d0
  7471.  subq #1,d7
  7472.  bgt dofloornoclipGOUR
  7473.  
  7474.  bra predontdrawfloorGOUR
  7475.  
  7476.  
  7477.  
  7478. dists:
  7479. ; incbin "floordists"
  7480. drawit: dc.w 0
  7481.  
  7482. LineToUse: dc.l 0
  7483.  
  7484. ***************************
  7485. * Right then, time for the floor
  7486. * routine...
  7487. * For test purposes, give it
  7488. * a3 = point to screen
  7489. * d0= z distance away
  7490. * and sinval+cosval must be set up.
  7491. ***************************
  7492.  
  7493. BLACKFLOOR:
  7494.  moveq #0,d0
  7495.  bra.s DOBLACK
  7496.  
  7497. SimpleFloorLine:
  7498.  
  7499.  CACHE_OFF d2
  7500.  
  7501.  move.l #doacrossline,a1
  7502.  move.w leftedge(pc),d1
  7503.  move.w rightedge(pc),d3
  7504.  sub.w d1,d3
  7505.  lea (a1,d1.w*4),a1
  7506.  move.w (a1,d3.w*4),d4
  7507.  move.w #$4e75,(a1,d3.w*4)
  7508.  
  7509.  tst.b CLRNOFLOOR
  7510.  bne.s BLACKFLOOR
  7511.  
  7512.  move.l #PLAINSCALE,a2
  7513.  
  7514.  move.w d0,d2
  7515.  move.w lighttype,d1
  7516.  asr.w #8,d2
  7517.  add.w #5,d1
  7518.  add.w d2,d1
  7519.  bge.s .fixedbright
  7520.  moveq #0,d1
  7521. .fixedbright:
  7522.  cmp.w #28,d1
  7523.  ble.s .smallbright
  7524.  move.w #28,d1
  7525. .smallbright:
  7526.  lea (a2,d1.w*2),a2
  7527.  
  7528.  move.w whichtile,d0
  7529.  move.w d0,d1
  7530.  and.w #$3,d1
  7531.  and.w #$300,d0
  7532.  lsl.b #6,d1
  7533.  move.b d1,d0
  7534.  move.w d0,tstwhich
  7535.  move.w (a2,d0.w),d0
  7536.  
  7537. DOBLACK:
  7538.  jsr (a1)
  7539.  move.w d4,(a1,d3.w*4)
  7540.  
  7541.  CACHE_ON d2
  7542.  
  7543.  rts
  7544.  
  7545. tstwhich: dc.w 0
  7546. whichtile: dc.w 0
  7547.   
  7548. PLAINSCALE: incbin "ab3:includes/plainscale"
  7549.   
  7550. storeit: dc.l 0
  7551.  
  7552. doacrossline:
  7553. val SET 0
  7554.  REPT 32
  7555.  move.w d0,val(a3)
  7556. val SET val+4
  7557.  ENDR
  7558. val SET val+4
  7559.  REPT 32
  7560.  move.w d0,val(a3)
  7561. val SET val+4
  7562.  ENDR
  7563. val SET val+4
  7564.  REPT 32
  7565.  move.w d0,val(a3)
  7566. val SET val+4
  7567.  ENDR
  7568.  rts
  7569.  
  7570.  
  7571. leftedge: dc.w 0
  7572. rightedge: dc.w 0
  7573.  
  7574. rndpt: dc.l rndtab
  7575.  
  7576.  
  7577. dst: dc.w 0
  7578.  
  7579. FloorLine:
  7580.  
  7581.  move.l floortile,a0
  7582.  adda.w whichtile,a0
  7583.  move.w lighttype,d1
  7584.  move.w d0,dst
  7585.  move.w d0,d2
  7586. *********************
  7587. * Old version
  7588.  asr.w #8,d2
  7589.  add.w #5,d1
  7590. *********************
  7591. ; asr.w #3,d2
  7592. ; sub.w #4,d2
  7593. ; cmp.w #6,d2
  7594. ; blt.s flbrbr
  7595. ; move.w #6,d2
  7596. ;flbrbr:
  7597. *********************
  7598.  add.w d2,d1
  7599.  bge.s .fixedbright
  7600.  moveq #0,d1
  7601. .fixedbright:
  7602.  cmp.w #28,d1
  7603.  ble.s .smallbright
  7604.  move.w #28,d1
  7605. .smallbright:
  7606.  lea floorscalecols,a1
  7607.  add.l floorbright(pc,d1.w*4),a1
  7608.  bra pastfloorbright
  7609.  
  7610. ConstCol: dc.w 0
  7611.  
  7612. BumpLine:
  7613.  
  7614.  tst.b smoothbumps
  7615.  beq.s Chunky
  7616.  
  7617.  move.l #SmoothTile,a0
  7618.  lea Smoothscalecols,a1
  7619.  bra pastast
  7620.  
  7621. Chunky:
  7622.  
  7623.  moveq #0,d2
  7624.  move.l #Bumptile,a0
  7625.  move.w whichtile,d2
  7626.  adda.w d2,a0
  7627.  ror.l #2,d2
  7628.  lsr.w #6,d2
  7629.  rol.l #2,d2
  7630.  and.w #15,d2
  7631.  move.l #ConstCols,a1
  7632.  move.w (a1,d2.w*2),ConstCol
  7633.  lea Bumpscalecols,a1
  7634.  
  7635. pastast:
  7636.  move.w lighttype,d1
  7637.  
  7638.  move.w d0,dst
  7639.  
  7640.  move.w d0,d2
  7641. *********************
  7642. * Old version
  7643.  asr.w #8,d2
  7644.  add.w #5,d1
  7645. *********************
  7646. ; asr.w #3,d2
  7647. ; sub.w #4,d2
  7648. ; cmp.w #6,d2
  7649. ; blt.s flbrbr
  7650. ; move.w #6,d2
  7651. ;flbrbr:
  7652. *********************
  7653.  add.w d2,d1
  7654.  bge.s .fixedbright
  7655.  moveq #0,d1
  7656. .fixedbright:
  7657.  cmp.w #31,d1
  7658.  ble.s .smallbright
  7659.  move.w #31,d1
  7660. .smallbright:
  7661.  add.l floorbright(pc,d1.w*4),a1
  7662.  bra pastfloorbright
  7663.  
  7664.  
  7665. floorbright:
  7666.  dc.l 512*0
  7667.  dc.l 512*1
  7668.  dc.l 512*2
  7669.  dc.l 512*3
  7670.  dc.l 512*4
  7671.  
  7672.  dc.l 512*5
  7673.  dc.l 512*6
  7674.  dc.l 512*7
  7675.  dc.l 512*8
  7676.  dc.l 512*9
  7677.  
  7678.  dc.l 512*10
  7679.  dc.l 512*11
  7680.  dc.l 512*12
  7681.  dc.l 512*13
  7682.  dc.l 512*14
  7683.  
  7684.  dc.l 512*15
  7685.  dc.l 512*16
  7686.  dc.l 512*17
  7687.  dc.l 512*18
  7688.  dc.l 512*19
  7689.  
  7690.  dc.l 512*20
  7691.  dc.l 512*21
  7692.  dc.l 512*22
  7693.  dc.l 512*23
  7694.  dc.l 512*24
  7695.  
  7696.  dc.l 512*25
  7697.  dc.l 512*26
  7698.  dc.l 512*27
  7699.  dc.l 512*28
  7700.  dc.l 512*29
  7701.  
  7702.  dc.l 512*30
  7703.  dc.l 512*31
  7704.  
  7705. widthleft: dc.w 0
  7706. scaleval: dc.w 0
  7707. sxoff: dc.l 0
  7708. szoff: dc.l 0
  7709. xoff34: dc.w 0
  7710. zoff34: dc.w 0
  7711. scosval: dc.w 0
  7712. ssinval: dc.w 0
  7713.  
  7714.  
  7715. floorsetbright:
  7716.  move.l #walltiles,a0
  7717.  
  7718. pastfloorbright
  7719.  move.w d0,d1
  7720.  muls cosval,d1    ; change in x across whole width
  7721.  move.w d0,d2
  7722.  muls sinval,d2    ; change in z across whole width
  7723.  neg.l d2
  7724. scaleprog:
  7725.  move.w scaleval(pc),d3
  7726.  beq.s .samescale
  7727.  bgt.s .scaledown
  7728.  neg.w d3
  7729.  asr.l d3,d1
  7730.  asr.l d3,d2
  7731.  bra.s .samescale
  7732. .scaledown:
  7733.  asl.l d3,d1
  7734.  asl.l d3,d2
  7735. .samescale
  7736.  
  7737.  move.l d1,d3 ;    z cos
  7738.  move.l d3,d6
  7739.  move.l d3,d5
  7740.  asr.l #1,d6
  7741.  add.l d6,d3
  7742.  asr.l #1,d3
  7743.  
  7744.  move.l d2,d4    ; z sin
  7745.  move.l d4,d6
  7746.  asr.l #1,d6
  7747.  add.l d4,d6
  7748.  add.l d3,d4
  7749.  neg.l d4    ; start x
  7750.  
  7751.  asr.l #1,d6    ; zsin/2
  7752.  sub.l d6,d5    ; start z
  7753.  
  7754.  add.l sxoff,d4
  7755.  add.l szoff,d5
  7756.  
  7757.  
  7758.  tst.b FULLSCR
  7759.  beq.s .nob
  7760.  
  7761.  moveq #0,d6
  7762.  move.w leftedge(pc),d6
  7763.  beq.s .nomultleftB
  7764.  
  7765.  add.l d6,d6
  7766.  divs #3,d6
  7767.  ext.l d6
  7768.  
  7769.  move.l d1,a4
  7770.  move.l d2,a5
  7771.  
  7772.  muls.l d6,d3:d1
  7773.  asr.l #7,d1
  7774.  add.l d1,d4
  7775.  
  7776.  muls.l d6,d3:d2
  7777.  asr.l #7,d2
  7778.  add.l d2,d5
  7779.  move.l a4,d1
  7780.  move.l a5,d2
  7781.  
  7782.  move.w leftedge(pc),d6
  7783.  
  7784. .nomultleftB:
  7785.  
  7786.  move.w d4,startsmoothx
  7787.  move.w d5,startsmoothz
  7788.  
  7789.  asr.l #8,d4
  7790.  asl.l #8,d5
  7791. ; add.w szoff,d5
  7792. ; add.w sxoff,d4
  7793. ; and.w #63,d4
  7794. ; and.w #63*256,d5
  7795.  
  7796.  move.w d4,d5
  7797.  
  7798.  asr.l #6,d1
  7799.  asr.l #6,d2
  7800.  divs.l #3,d1
  7801.  divs.l #3,d2
  7802.  
  7803.  bra.s doneallmult
  7804.  
  7805. .nob 
  7806.  
  7807.  moveq #0,d6
  7808.  move.w leftedge(pc),d6
  7809.  beq.s nomultleft
  7810.  
  7811.  move.l d1,a4
  7812.  move.l d2,a5
  7813.  
  7814.  muls.l d6,d3:d1
  7815.  asr.l #7,d1
  7816.  add.l d1,d4
  7817.  
  7818.  muls.l d6,d3:d2
  7819.  asr.l #7,d2
  7820.  add.l d2,d5
  7821.  move.l a4,d1
  7822.  move.l a5,d2
  7823.  
  7824.  move.w leftedge(pc),d6
  7825.  
  7826. nomultleft:
  7827.  
  7828.  move.w d4,startsmoothx
  7829.  move.w d5,startsmoothz
  7830.  
  7831.  asr.l #8,d4
  7832.  asl.l #8,d5
  7833. ; add.w szoff,d5
  7834. ; add.w sxoff,d4
  7835. ; and.w #63,d4
  7836. ; and.w #63*256,d5
  7837.  
  7838.  move.w d4,d5
  7839.  
  7840.  asr.l #7,d1
  7841.  asr.l #7,d2
  7842. ; divs.l #3,d1
  7843. ; divs.l #3,d2
  7844.  
  7845. doneallmult:
  7846.  
  7847.  move.w d1,a4
  7848.  move.w d2,a5
  7849.  asl.l #8,d2
  7850. ; and.w #%0011111100000000,d2
  7851.  asr.l #8,d1
  7852.  move.w d1,d2
  7853.  move.l #$3fff3fff,d1
  7854.  and.l d1,d5
  7855. ; swap d5
  7856. ; move.w startsmoothz,d5
  7857. ; swap d5
  7858. ; swap d2
  7859. ; move.w a5,d2
  7860. ; swap d2
  7861.  
  7862. ***********************************
  7863.  
  7864.  move.w d6,a2
  7865. ; move.l d2,d6
  7866. ; add.w #256,d6
  7867.  
  7868.  moveq #0,d0
  7869.  
  7870. ; tst.w a2
  7871. ; beq startatleftedge
  7872.  
  7873. ; move.w widthleft(pc),d4
  7874.  
  7875.  move.w rightedge(pc),d3
  7876.  
  7877.  lea (a3,a2.w*2),a3
  7878. ; move.l REFPTR,a4
  7879. ; lea (a4,a2.w*2),a4
  7880.  
  7881.  move.w d3,d7
  7882.  sub.w a2,d7
  7883.  bra intofirststrip
  7884.  
  7885.  cmp.w #31,a2
  7886.  bgt.s notinfirststrip
  7887.  lea (a3,a2.w*4),a3
  7888.  cmp.w #32,d3
  7889.  ble.s allinfirststrip
  7890.  move.w #32,d7
  7891.  sub.w d7,d3
  7892.  sub.w a2,d7
  7893.  bra intofirststrip
  7894.  
  7895. allinfirststrip
  7896.  sub.w a2,d3
  7897.  move.w d3,d7
  7898.  move.w #0,d4
  7899.  bra allintofirst
  7900.  
  7901. notinfirststrip:
  7902.  sub.w #32,a2
  7903.  sub.w #32,d3
  7904.  adda.w #33*4,a3
  7905.  cmp.w #31,a2
  7906.  bgt.s notstartinsec
  7907.  lea (a3,a2.w*4),a3
  7908.  cmp.w #32,d3
  7909.  ble.s allinsecstrip
  7910.  move.w #32,d7
  7911.  sub.w d7,d3
  7912.  sub.w a2,d7
  7913.  move.w d3,d4
  7914.  bra allintofirst
  7915.  
  7916. allinsecstrip
  7917.  sub.w a2,d3
  7918.  move.w d3,d7
  7919.  move.w #0,d4
  7920.  bra allintofirst
  7921.  rts
  7922.  
  7923. prot8: dc.w 0
  7924.  
  7925. notstartinsec:
  7926.  sub.w #32,a2
  7927.  sub.w #32,d3
  7928.  adda.w #33*4,a3
  7929.  lea (a3,a2.w*4),a3
  7930.  cmp.w #32,d3
  7931.  ble.s allinthirdstrip
  7932.  move.w #32,d7
  7933.  sub.w d7,d3
  7934.  sub.w a2,d7
  7935.  move.w d3,d4
  7936.  bra allintofirst
  7937.  rts
  7938.  
  7939. allinthirdstrip
  7940.  sub.w a2,d3
  7941.  move.w d3,d7
  7942.  move.w #0,d4
  7943.  bra allintofirst
  7944.  rts
  7945.  
  7946. startatleftedge:
  7947.  
  7948. ; move.w rightedge(pc),d3
  7949. ; sub.w a2,d3
  7950. ; move.w d3,d7
  7951. ; cmp.w #32,d7
  7952. ; ble.s .notoowide
  7953. ; move.w #32,d7
  7954. ;.notoowide:
  7955. ; sub.w d7,d3
  7956. intofirststrip:
  7957. ;
  7958. ; move.w d3,d4
  7959. allintofirst:
  7960.  
  7961.  move.w startsmoothx,d3
  7962.  
  7963. tstwat:
  7964.  
  7965.  tst.b gourfloor
  7966.  bne gouraudfloor
  7967.  
  7968.  tst.b usewater
  7969.  bne texturedwater
  7970.  
  7971. ******************************
  7972. * BumpMap the floor/ceiling! *
  7973.  tst.b usebumps
  7974.  bne.s BumpMap
  7975. ******************************
  7976.  
  7977. ordinary:
  7978.  moveq #0,d0
  7979.  
  7980.  dbra d7,acrossscrn
  7981.  rts
  7982.  
  7983. usebumps: dc.w $0
  7984. smoothbumps: dc.w $0
  7985. gourfloor: dc.w 0
  7986.  
  7987.  include "ab3:source_4000/bumpmap.s"
  7988.  
  7989.  CNOP 0,4
  7990. backbefore:
  7991.  and.w d1,d5
  7992.  move.b (a0,d5.w*4),d0
  7993.  add.w a4,d3
  7994.  addx.l d6,d5
  7995.  move.w (a1,d0.w*2),(a3)
  7996.  addq #4,a3
  7997.  dbcs d7,acrossscrn
  7998.  dbcc d7,backbefore
  7999.  bra.s past1
  8000.  
  8001. acrossscrn:
  8002.  and.w d1,d5
  8003.  move.b (a0,d5.w*4),d0
  8004.  add.w a4,d3
  8005.  addx.l d2,d5
  8006.  move.w (a1,d0.w*2),(a3)
  8007.  addq #4,a3
  8008.  dbcs d7,acrossscrn
  8009.  dbcc d7,backbefore
  8010. past1:
  8011.  bcc.s gotoacross
  8012.  
  8013.  move.w d4,d7
  8014.  bne.s .notdoneyet
  8015.  rts
  8016. .notdoneyet:
  8017.  
  8018.  cmp.w #32,d7
  8019.  ble.s .notoowide
  8020.  move.w #32,d7
  8021. .notoowide
  8022.  sub.w d7,d4  
  8023.  addq #4,a3
  8024.  
  8025.  dbra d7,backbefore
  8026.  rts
  8027.  
  8028.  
  8029. gotoacross:
  8030.  
  8031.  move.w d4,d7
  8032.  bne.s .notdoneyet
  8033.  rts
  8034. .notdoneyet:
  8035.  
  8036.  cmp.w #32,d7
  8037.  ble.s .notoowide
  8038.  move.w #32,d7
  8039. .notoowide
  8040.  sub.w d7,d4  
  8041.  addq #4,a3
  8042.  
  8043.  dbra d7,acrossscrn
  8044.  rts
  8045.  
  8046. leftbright: dc.l 0
  8047. brightspd: dc.l 0
  8048.  
  8049. gouraudfloor:
  8050.  
  8051.  move.w leftbright,d0
  8052.  move.l d1,d4
  8053.  move.w brightspd,d1
  8054.  
  8055.  move.w d7,d3
  8056.  asr.w #1,d7
  8057.  btst #0,d3
  8058.  beq.s .nosingle1
  8059.  move.w d5,d3
  8060.  move.l d5,d6
  8061.  lsr.w #8,d3
  8062.  swap d6
  8063.  move.b d3,d6
  8064.  move.w d0,d3
  8065.  move.b (a0,d6.w*4),d3
  8066.  add.w d1,d0
  8067.  add.l d2,d5
  8068.  and.l d4,d5
  8069.  move.w (a1,d3.w*2),(a3)+
  8070. .nosingle1
  8071.  
  8072.  move.w d7,d3
  8073.  asr.w #1,d7
  8074.  btst #0,d3
  8075.  beq.s .nosingle2
  8076.  move.w d5,d3
  8077.  move.l d5,d6
  8078.  lsr.w #8,d3
  8079.  swap d6
  8080.  move.b d3,d6
  8081.  move.w d0,d3
  8082.  move.b (a0,d6.w*4),d3
  8083.  add.w d1,d0
  8084.  add.l d2,d5
  8085.  and.l d4,d5
  8086.  move.l d5,d6
  8087.  swap d6
  8088.  move.w (a1,d3.w*2),(a3)+
  8089.  move.w d5,d3
  8090.  lsr.w #8,d3
  8091.  move.b d3,d6
  8092.  move.w d0,d3
  8093.  move.b (a0,d6.w*4),d3
  8094.  add.w d1,d0
  8095.  add.l d2,d5
  8096.  and.l d4,d5
  8097.  move.w (a1,d3.w*2),(a3)+
  8098.  
  8099. .nosingle2
  8100.  
  8101.  move.l d5,d6
  8102.  swap d6
  8103.  
  8104.  dbra d7,acrossscrngour
  8105.  rts
  8106.  
  8107.  CNOP 0,4
  8108.  
  8109. acrossscrngour:
  8110.  move.w d5,d3
  8111.  lsr.w #8,d3
  8112.  move.b d3,d6
  8113.  move.w d0,d3
  8114.  move.b (a0,d6.w*4),d3
  8115.  add.w d1,d0
  8116.  add.l d2,d5
  8117.  and.l d4,d5
  8118.  move.l d5,d6
  8119.  swap d6
  8120.  move.w (a1,d3.w*2),(a3)+
  8121.  move.w d5,d3
  8122.  lsr.w #8,d3
  8123.  move.b d3,d6
  8124.  move.w d0,d3
  8125.  move.b (a0,d6.w*4),d3
  8126.  add.w d1,d0
  8127.  add.l d2,d5
  8128.  and.l d4,d5
  8129.  move.l d5,d6
  8130.  swap d6
  8131.  move.w (a1,d3.w*2),(a3)+
  8132.  move.w d5,d3
  8133.  lsr.w #8,d3
  8134.  move.b d3,d6
  8135.  move.w d0,d3
  8136.  move.b (a0,d6.w*4),d3
  8137.  add.w d1,d0
  8138.  add.l d2,d5
  8139.  and.l d4,d5
  8140.  move.l d5,d6
  8141.  swap d6
  8142.  move.w (a1,d3.w*2),(a3)+
  8143.  move.w d5,d3
  8144.  lsr.w #8,d3
  8145.  move.b d3,d6
  8146.  move.w d0,d3
  8147.  move.b (a0,d6.w*4),d3
  8148.  add.w d1,d0
  8149.  add.l d2,d5
  8150.  and.l d4,d5
  8151.  move.l d5,d6
  8152.  swap d6
  8153.  move.w (a1,d3.w*2),(a3)+
  8154.  dbra d7,acrossscrngour
  8155.  
  8156.  rts
  8157.  
  8158. ;backbeforegour:
  8159. ; and.w #63*256+63,d5
  8160. ; move.b (a0,d5.w*4),d0
  8161. ; add.l d1,d0
  8162. ; bcc.s .nomoreb
  8163. ; add.w #256,d0
  8164. ;.nomoreb:
  8165. ; add.w a4,d3
  8166. ; move.w (a1,d0.w*2),(a3)+
  8167. ; addx.l d6,d5
  8168. ; dbcs d7,acrossscrngour
  8169. ; dbcc d7,backbeforegour
  8170. ; rts
  8171. ; bra.s past1gour
  8172.  
  8173. ;acrossscrngour:
  8174. ; and.l #$3f3f,d5 
  8175. ; move.b (a0,d5.w*4),d0
  8176. ; add.l d1,d0
  8177. ; bcc.s .nomoreb
  8178. ; add.w #256,d0
  8179. ;.nomoreb:
  8180. ; add.w a4,d3
  8181. ; move.w (a1,d0.w*2),(a3)+
  8182. ; addx.l d2,d5
  8183. ; dbcs d7,acrossscrngour
  8184. ; dbcc d7,backbeforegour
  8185. ;past1gour:
  8186. ; rts
  8187.  
  8188.  move.w d4,d7
  8189.  bne.s .notdoneyet
  8190.  move.l d0,leftbright
  8191.  
  8192.  rts
  8193. .notdoneyet:
  8194.  
  8195.  cmp.w #32,d7
  8196.  ble.s .notoowide
  8197.  move.w #32,d7
  8198. .notoowide
  8199.  sub.w d7,d4  
  8200.  addq #4,a3
  8201.  
  8202. ; dbra d7,backbeforegour
  8203.  rts
  8204.  
  8205.  
  8206. gotoacrossgour:
  8207.  
  8208.  move.w d4,d7
  8209.  bne.s .notdoneyet
  8210.  rts
  8211. .notdoneyet:
  8212.  
  8213.  cmp.w #32,d7
  8214.  ble.s .notoowide
  8215.  move.w #32,d7
  8216. .notoowide
  8217.  sub.w d7,d4  
  8218.  addq #4,a3
  8219.  
  8220.  dbra d7,acrossscrngour
  8221.  rts
  8222.  
  8223.  
  8224. waterpt: dc.l waterlist
  8225.  
  8226. waterlist:
  8227.  dc.l waterfile
  8228.  dc.l waterfile+2
  8229.  dc.l waterfile+256
  8230.  dc.l waterfile+256+2
  8231.  dc.l waterfile+512
  8232.  dc.l waterfile+512+2
  8233.  dc.l waterfile+768
  8234.  dc.l waterfile+768+2
  8235. ; dc.l waterfile+768
  8236. ; dc.l waterfile+512+2
  8237. ; dc.l waterfile+512
  8238. ; dc.l waterfile+256+2
  8239. ; dc.l waterfile+256
  8240. ; dc.l waterfile+2
  8241. endwaterlist:
  8242.  
  8243. watertouse: dc.l waterfile
  8244.  
  8245. wtan: dc.w 0
  8246. wateroff: dc.l 0
  8247.  
  8248. REFLECTIONWATER:
  8249.  
  8250.  move.l d1,d4
  8251.  
  8252.  add.l wateroff,d5
  8253.  
  8254.  move.l #brightentab,a1
  8255.  move.w dst,d0
  8256.  clr.b d0
  8257.  
  8258.  add.w d0,d0
  8259.  cmp.w #12*512,d0
  8260.  blt.s .notoowater
  8261.  move.w #12*512,d0
  8262.  
  8263. .notoowater:
  8264.   
  8265.  adda.w d0,a1
  8266.  
  8267.  move.w dst,d0
  8268.  asl.w #7,d0
  8269.  add.w wtan,d0
  8270.  and.w #8191,d0
  8271.  move.l #SineTable,a0
  8272.  move.w (a0,d0.w),d0
  8273.  ext.l d0
  8274.  
  8275.  move.w dst,d3
  8276.  add.w #300,d3
  8277.  divs d3,d0
  8278.  asr.w #5,d0
  8279.  addq #4,d0
  8280.  cmp.w disttobot,d0
  8281.  blt.s oknotoffbotototr
  8282.  
  8283.  move.w disttobot,d0
  8284.  subq #1,d0
  8285.  
  8286. oknotoffbotototr
  8287.  
  8288. ; move.w dst,d3
  8289. ; asr.w #7,d3
  8290. ; add.w d3,d0
  8291.  
  8292.  muls #320*2,d0
  8293.  tst.w above
  8294.  beq.s nonnnnnegr
  8295.  neg.l d0
  8296.  
  8297. nonnnnnegr:
  8298.  
  8299.  move.l d0,a6
  8300.  
  8301.  move.l watertouse,a0
  8302.  
  8303. ; move.l #mixtab,a5
  8304.  
  8305.  moveq #0,d1
  8306.  
  8307.  move.w startsmoothx,d3
  8308.  dbra d7,acrossscrnwr
  8309.  rts
  8310.  
  8311. backbeforewr:
  8312.  and.w d1,d5 
  8313.  move.w (a0,d5.w*4),d0
  8314.  move.b (a3,a6.w),d0
  8315.  move.w (a1,d0.w*2),(a3)+
  8316.  add.w a4,d3
  8317.  addx.l d6,d5
  8318.  dbcs d7,acrossscrnwr
  8319.  dbcc d7,backbeforewr
  8320.  rts
  8321.  
  8322. acrossscrnwr:
  8323.  move.w d5,d3
  8324.  move.l d5,d6
  8325.  lsr.w #8,d3
  8326.  swap d6
  8327.  move.b d3,d6
  8328.  move.w (a0,d6.w*4),d0
  8329.  add.l d2,d5
  8330.  move.w (a4,a6.w),d1
  8331.  addq #2,a4
  8332.  move.b (a3,a6.w),d1
  8333.  move.b (a5,d1.l),d0
  8334.  and.l d4,d5
  8335.  move.w (a1,d0.w*2),(a3)+
  8336.  dbra d7,acrossscrnwr
  8337.  rts
  8338.  
  8339. texturedwater:
  8340.  
  8341.  move.l d1,d4
  8342.  
  8343.  add.l wateroff,d5
  8344.  
  8345.  move.l #brightentab,a1
  8346.  move.w dst,d0
  8347.  clr.b d0
  8348.  
  8349.  add.w d0,d0
  8350.  cmp.w #12*512,d0
  8351.  blt.s .notoowater
  8352.  move.w #12*512,d0
  8353.  
  8354.  
  8355. .notoowater:
  8356.   
  8357.  adda.w d0,a1
  8358.  
  8359.  move.w dst,d0
  8360.  asl.w #7,d0
  8361.  add.w wtan,d0
  8362.  and.w #8191,d0
  8363.  move.l #SineTable,a0
  8364.  move.w (a0,d0.w),d0
  8365.  ext.l d0
  8366.  
  8367.  move.w dst,d3
  8368.  add.w #300,d3
  8369.  divs d3,d0
  8370.  asr.w #5,d0
  8371.  addq #4,d0
  8372.  cmp.w disttobot,d0
  8373.  blt.s oknotoffbototot
  8374.  
  8375.  move.w disttobot,d0
  8376.  subq #1,d0
  8377.  
  8378. oknotoffbototot
  8379.  
  8380. ; move.w dst,d3
  8381. ; asr.w #7,d3
  8382. ; add.w d3,d0
  8383.  
  8384.  muls #320*2,d0
  8385.  tst.w above
  8386.  beq.s nonnnnneg
  8387.  neg.l d0
  8388.  
  8389. nonnnnneg:
  8390.  
  8391.  move.l d0,a6
  8392.  
  8393.  move.l watertouse,a0
  8394.  
  8395.  move.w startsmoothx,d3
  8396.  dbra d7,acrossscrnw
  8397.  rts
  8398.  
  8399. backbeforew:
  8400.  and.w d1,d5
  8401.  move.w (a0,d5.w*4),d0
  8402.  move.b (a3,a6.w),d0
  8403.  move.w (a1,d0.w*2),(a3)+
  8404.  add.w a4,d3
  8405.  addx.l d6,d5
  8406.  dbcs d7,acrossscrnw
  8407.  dbcc d7,backbeforew
  8408.  rts
  8409.  
  8410. acrossscrnw:
  8411.  move.w d5,d3
  8412.  move.l d5,d6
  8413.  lsr.w #8,d3
  8414.  swap d6
  8415.  move.b d3,d6
  8416.  move.w (a0,d6.w*4),d0
  8417.  add.l d2,d5
  8418.  move.b (a3,a6.w),d0
  8419.  and.l d4,d5
  8420.  move.w (a1,d0.w*2),(a3)+
  8421.  dbra d7,acrossscrnw
  8422.  rts
  8423.  
  8424.  
  8425. usewater: dc.w 0
  8426.  dc.w 0
  8427. startsmoothx: dc.w 0
  8428.  dc.w 0
  8429. startsmoothz: dc.w 0
  8430.  
  8431. ********************************
  8432. *
  8433.  include "AB3:source_4000/ObjDrawHIRES.s"
  8434. *
  8435. ********************************
  8436.  
  8437. numframes:
  8438.  dc.w 0
  8439.  
  8440. alframe: dc.l 0
  8441.  
  8442. alan:
  8443.  dcb.l 8,0
  8444.  dcb.l 8,1
  8445.  dcb.l 8,2
  8446.  dcb.l 8,3
  8447. endalan:
  8448.  
  8449. alanptr: dc.l alan
  8450.  
  8451. Time2: dc.l 0
  8452. dispco:
  8453.  dc.w 0
  8454.  
  8455.  
  8456. key_interrupt:
  8457.         movem.l    d0-d7/a0-a6,-(sp)
  8458.  
  8459. ;        move.w    INTREQR,d0
  8460. ;        btst    #3,d0
  8461. ;        beq    .not_key
  8462.  
  8463.         move.b    $bfdd00,d0
  8464.         btst    #0,d0
  8465.         bne    .key_cont
  8466. ;        move.b    $bfed01,d0
  8467. ;        btst    #0,d0
  8468. ;        bne    .key_cont
  8469.     
  8470. ;        btst    #3,d0
  8471. ;        beq    .key_cont
  8472.  
  8473.         move.b    $bfec01,d0
  8474.         clr.b    $bfec01
  8475.  
  8476.         tst.b    d0
  8477.         beq    .key_cont
  8478.  
  8479. ;        bset    #6,$bfee01
  8480. ;        move.b    #$f0,$bfe401
  8481. ;        move.b    #$00,$bfe501
  8482. ;        bset    #0,$bfee01
  8483.  
  8484.  
  8485.         not.b    d0
  8486.         ror.b    #1,d0
  8487.         lea.l    KeyMap,a0
  8488.         tst.b    d0
  8489.         bmi.b    .key_up
  8490.         and.w    #$7f,d0
  8491. ;        add.w    #1,d0
  8492.         move.b    #$ff,(a0,d0.w)
  8493.         move.b    d0,lastpressed
  8494.  
  8495.         bra.b    .key_cont2
  8496. .key_up:
  8497.         and.w    #$7f,d0
  8498. ;        add.w    #1,d0
  8499.         move.b    #$00,(a0,d0.w)
  8500.  
  8501. .key_cont2
  8502. ;        btst    #0,$bfed01
  8503. ;        beq    .key_cont2
  8504. ;        move.b    #%00000000,$bfee01
  8505. ;        move.b    #%10001000,$bfed01
  8506.  
  8507. ;alt keys should not be independent so overlay ralt on lalt
  8508.  
  8509.         
  8510. .key_cont
  8511.  
  8512. ;        move.w    #$0008,INTREQ
  8513. .not_key:    ;lea.l    $dff000,a5
  8514.  
  8515. ;        lea.l    _keypressed(pc),a0
  8516. ;        move.b    101(a0),d0    ;read LALT
  8517. ;        or.b    102(a0),d0    ;blend it with RALT
  8518. ;        move.b    d0,127(a0)    ;save in combined position
  8519.  
  8520.         move.l #0,d0
  8521.         movem.l    (sp)+,d0-d7/a0-a6
  8522.  
  8523.  
  8524.         rts
  8525.  
  8526. lastpressed:    dc.b 0
  8527. KInt_CCode    Ds.b    1
  8528. KInt_Askey    Ds.b    1
  8529. KInt_OCode    Ds.w    1
  8530.  
  8531.  
  8532. OldSpace: dc.b 0
  8533. SpaceTapped: dc.b 0
  8534. PLR1_SPCTAP: dc.b 0
  8535. PLR2_SPCTAP: dc.b 0
  8536. PLR1_Ducked: dc.b 0
  8537. PLR2_Ducked: dc.b 0
  8538.  even
  8539.  
  8540.  include "ab3:source_4000/PLR1CONTROL.s"
  8541.  include "ab3:source_4000/PLR2CONTROL.s"
  8542.  include "ab3:source_4000/FALL.s"
  8543.  
  8544. prot7: dc.w 0
  8545.  
  8546. GOTTOSEND: dc.w 0
  8547.  
  8548. OtherInter:
  8549.  move.w #$0010,$dff000+intreq
  8550.  movem.l d0-d7/a0-a6,-(a7)
  8551.  bra justshake
  8552.  
  8553.     cnop 0,4
  8554.  
  8555. Chan0inter:
  8556.  
  8557.     SAVEREGS
  8558.     jsr    .routine
  8559.     GETREGS
  8560.  
  8561. ;    move.w    #1024+'.',$dff030
  8562.     
  8563.     moveq #0,d0
  8564.     move.l #$dff000,a0
  8565.     rts
  8566.  
  8567. .routine
  8568.  
  8569.     
  8570. ;w move.w #$0010,$dff000+intreq
  8571.  
  8572.  tst.b doanything
  8573.  bne dosomething
  8574.  
  8575.  movem.l d0-d7/a0-a6,-(a7)
  8576.  bra JUSTSOUNDS
  8577.  
  8578.  rts
  8579.  
  8580. tabheld: dc.w 0
  8581. ObjWork: ds.l 512
  8582. WORKPTR: dc.l 0
  8583. thistime: dc.w 0
  8584.  
  8585. DOALLANIMS:
  8586.  
  8587.  sub.b #1,thistime
  8588.  ble.s .okdosome
  8589.  rts
  8590.  
  8591. .okdosome:
  8592.  move.w #5,thistime
  8593.  
  8594.  
  8595.  move.l #ObjWork,a5
  8596.  move.l ObjectData,a0
  8597. Objectloop2:
  8598.  tst.w (a0)
  8599.  blt doneallobj2
  8600.  move.w 12(a0),d0
  8601.  blt doneobj2
  8602.  move.w d0,GraphicRoom(a0)
  8603.  tst.b worry(a0)
  8604.  beq.s doneobj2
  8605.  
  8606.  move.b 16(a0),d0
  8607.  cmp.b #1,d0
  8608.  blt JUMPALIENANIM
  8609.  beq JUMPOBJECTANIM
  8610. ; cmp.b #2,d0
  8611. ; beq JUMPBULLET
  8612.  
  8613. doneobj2:
  8614.  
  8615.  adda.w #64,a0
  8616.  addq #4,a5
  8617.  bra Objectloop2
  8618.  
  8619. doneallobj2:
  8620.  rts
  8621.  
  8622. JUMPALIENANIM:
  8623.  
  8624.  moveq #0,d0
  8625.  move.b WhichAnim(a0),d0
  8626. ; 0=walking
  8627. ; 1=attacking
  8628. ; 2=getting hit
  8629. ; 3=dying
  8630.  
  8631.  cmp.b #1,d0
  8632.  blt.s ALWALK
  8633.  beq.s ALATTACK
  8634.  
  8635.  bra doneobj2
  8636.  
  8637. ALATTACK:
  8638.  move.l #8,d0
  8639.  bra intowalk
  8640.  
  8641.  
  8642. ALWALK:
  8643.  
  8644.  jsr ViewpointToDraw
  8645.  add.l d0,d0
  8646.  
  8647.  tst.b VECOBJ
  8648.  beq.s NOSIDES2
  8649.  moveq #0,d0
  8650. intowalk:
  8651.  
  8652. NOSIDES2:
  8653.  
  8654.  move.b d0,2(a5)
  8655.  move.l LINKFILE,a6
  8656.  add.l #AlienAnimData,a6
  8657.  
  8658.  moveq #0,d1
  8659.  move.b TypeOfThing(a0),d1
  8660.  muls #A_AnimLen,d1
  8661.  add.l d1,a6
  8662.  
  8663. ; move.l ANIMPOINTER,a6
  8664.  
  8665.  
  8666.  muls #A_OptLen,d0
  8667.  add.w d0,a6
  8668.  
  8669.  move.w SecTimer(a0),d1
  8670.  add.w #1,d1
  8671.  move.w d1,d2
  8672.  muls #A_FrameLen,d1
  8673.  tst.b (a6,d1.w)
  8674.  bge.s .noendanim
  8675.  moveq #0,d2
  8676.  moveq #0,d1
  8677. .noendanim
  8678.  move.w d2,SecTimer(a0)
  8679.  
  8680.  moveq #0,d0
  8681.  move.b 5(a6,d1.w),d0
  8682.  beq.s .nosoundmake
  8683.  
  8684.  movem.l d0-d7/a0-a6,-(a7)
  8685.  subq #1,d0
  8686.  move.w d0,Samplenum
  8687.  clr.b notifplaying
  8688.  move.b 1(a0),IDNUM
  8689.  move.w #200,Noisevol
  8690.  move.l #ObjRotated,a1
  8691.  move.w (a0),d0
  8692.  lea (a1,d0.w*8),a1
  8693.  move.l (a1),Noisex
  8694.  jsr MakeSomeNoise
  8695.  movem.l (a7)+,d0-d7/a0-a6
  8696. .nosoundmake
  8697.  
  8698.  move.b 6(a6,d1.w),d0
  8699.  beq.s .noaction
  8700.  add.b #1,(a5)
  8701.  move.b d1,1(a5)
  8702. .noaction
  8703.  bra doneobj2
  8704.  
  8705.  
  8706. JUMPOBJECTANIM:
  8707.  bra doneobj2
  8708.  
  8709.  
  8710. dosomething:
  8711.  
  8712.  
  8713.  addq.w #1,FramesToDraw
  8714.  movem.l d0-d7/a0-a6,-(a7)
  8715.  
  8716.  bsr DOALLANIMS
  8717.  
  8718.  move.l #KeyMap,a5
  8719.  
  8720.  tst.b $42(a5)
  8721.  bne.s .tabprsd
  8722.  clr.b tabheld
  8723.  bra.s .noswitch
  8724.  
  8725. .tabprsd:
  8726.  tst.b tabheld
  8727.  bne.s .noswitch
  8728.  not.b MAPON
  8729.  st tabheld
  8730. .noswitch
  8731.  
  8732.  tst.b $3e(a5)
  8733.  sne d0
  8734.  tst.b $1e(a5)
  8735.  sne d1
  8736.  tst.b $2d(a5)
  8737.  sne d2
  8738.  tst.b $2f(a5)
  8739.  sne d3
  8740.  
  8741.  tst.b $3d(a5)
  8742.  sne d4
  8743.  tst.b $3f(a5)
  8744.  sne d5
  8745.  tst.b $1d(a5)
  8746.  sne d6
  8747.  tst.b $1f(a5)
  8748.  sne d7
  8749.  
  8750.  or.b d4,d0
  8751.  or.b d5,d0
  8752.  or.b d6,d1
  8753.  or.b d7,d1
  8754.  or.b d4,d2
  8755.  or.b d6,d2
  8756.  or.b d7,d3
  8757.  or.b d5,d3
  8758.  
  8759.  move.w MAPBRIGHT,d4
  8760.  add.w #2,d4
  8761.  clr.l d5
  8762.  bset d4,d5
  8763.  
  8764.  tst.b d0
  8765.  beq.s .nomapup
  8766.  sub.w d5,mapzoff
  8767. .nomapup 
  8768.  
  8769.  tst.b d1
  8770.  beq.s .nomapdown
  8771.  add.w d5,mapzoff
  8772. .nomapdown 
  8773.  
  8774.  tst.b d2
  8775.  beq.s .nomapleft
  8776.  add.w d5,mapxoff
  8777. .nomapleft 
  8778.  
  8779.  tst.b d3
  8780.  beq.s .nomapright
  8781.  sub.w d5,mapxoff
  8782. .nomapright 
  8783.  
  8784.  tst.b $2e(a5)
  8785.  beq.s .nomapcentre
  8786.  
  8787.  move.w #0,mapxoff
  8788.  move.w #0,mapzoff
  8789.  
  8790. .nomapcentre
  8791.  
  8792. ; move.w STOPOFFSET,d0
  8793. ; tst.b 27(a5)
  8794. ; beq.s .nolookup
  8795. ; sub.w #5,d0
  8796. ; cmp.w #-80,d0
  8797. ; bgt.s .nolookup
  8798. ; move.w #-80,d0
  8799. ;.nolookup:
  8800. ; tst.b 42(a5)
  8801. ; beq.s .nolookdown
  8802. ; add.w #5,d0
  8803. ; cmp.w #80,d0
  8804. ; blt.s .nolookdown
  8805. ; move.w #80,d0
  8806. ;.nolookdown:
  8807. ;
  8808. ; move.w d0,STOPOFFSET
  8809. ; neg.w d0
  8810. ; add.w #120,d0
  8811. ; move.w d0,SMIDDLEY
  8812. ; muls #320*2,d0
  8813. ; move.l d0,SBIGMIDDLEY
  8814.  
  8815.  move.w STOPOFFSET,d0
  8816.  tst.b 27(a5)
  8817.  beq.s .nolookup
  8818.  
  8819.  sub.w #512,AIMSPD
  8820.  
  8821.  sub.w #5,d0
  8822.  cmp.w #-75,d0
  8823.  bgt.s .nolookup
  8824.  move.w #-512*15,AIMSPD
  8825.  move.w #-75,d0
  8826. .nolookup:
  8827.  tst.b 42(a5)
  8828.  beq.s .nolookdown
  8829.  add.w #512,AIMSPD
  8830.  add.w #5,d0
  8831.  cmp.w #75,d0
  8832.  blt.s .nolookdown
  8833.  move.w #512*15,AIMSPD
  8834.  move.w #75,d0
  8835. .nolookdown:
  8836.  
  8837.  
  8838.  move.w d0,STOPOFFSET
  8839.  neg.w d0
  8840.  add.w TOTHEMIDDLE,d0
  8841.  move.w d0,SMIDDLEY
  8842.  muls #320*2,d0
  8843.  move.l d0,SBIGMIDDLEY
  8844.  
  8845.  
  8846. ; jsr INITREC
  8847. ; jsr RECEIVE
  8848.  
  8849. ; tst.l BUFFER
  8850. ; beq.s justshake
  8851. ; st GOTTOSEND
  8852. ; move.l #OtherInter,$6c
  8853.  
  8854. justshake:
  8855.  
  8856.  cmp.b #'b',Prefsfile+3
  8857.  bne.s .noback
  8858.  jsr mt_music
  8859. .noback:
  8860.  
  8861.  bra dontshowtime
  8862.  
  8863.  tst.b oktodisplay
  8864.  beq dontshowtime
  8865.  clr.b oktodisplay
  8866.  subq.w #1,dispco
  8867.  bgt dontshowtime
  8868.  move.w #10,dispco
  8869.  
  8870.  move.l #TimerScr+10,a0
  8871.  move.l TimeCount,d0
  8872.  bge.s timenotneg
  8873.  move.l #1111*256,d0
  8874. timenotneg:
  8875.  asr.l #8,d0
  8876.  move.l #digits,a1
  8877.  move.w #7,d2
  8878. digitlop
  8879.  divs #10,d0
  8880.  swap d0
  8881.  lea (a1,d0.w*8),a2
  8882.  move.b (a2)+,(a0)
  8883.  move.b (a2)+,24(a0)
  8884.  move.b (a2)+,24*2(a0)
  8885.  move.b (a2)+,24*3(a0)
  8886.  move.b (a2)+,24*4(a0)
  8887.  move.b (a2)+,24*5(a0)
  8888.  move.b (a2)+,24*6(a0)
  8889.  move.b (a2)+,24*7(a0)
  8890.  subq #1,a0
  8891.  swap d0
  8892.  ext.l d0
  8893.  dbra d2,digitlop
  8894.  
  8895.  move.l #TimerScr+10+24*10,a0
  8896.  move.l NumTimes,d0
  8897.  move.l #digits,a1
  8898.  move.w #3,d2
  8899. digitlop2
  8900.  divs #10,d0
  8901.  swap d0
  8902.  lea (a1,d0.w*8),a2
  8903.  move.b (a2)+,(a0)
  8904.  move.b (a2)+,24(a0)
  8905.  move.b (a2)+,24*2(a0)
  8906.  move.b (a2)+,24*3(a0)
  8907.  move.b (a2)+,24*4(a0)
  8908.  move.b (a2)+,24*5(a0)
  8909.  move.b (a2)+,24*6(a0)
  8910.  move.b (a2)+,24*7(a0)
  8911.  subq #1,a0
  8912.  swap d0
  8913.  ext.l d0
  8914.  dbra d2,digitlop2
  8915.  
  8916.  move.l #TimerScr+10+24*20,a0
  8917.  moveq #0,d0
  8918.  move.w FramesToDraw,d0
  8919.  move.l #digits,a1
  8920.  move.w #2,d2
  8921. digitlop3
  8922.  divs #10,d0
  8923.  swap d0
  8924.  lea (a1,d0.w*8),a2
  8925.  move.b (a2)+,(a0)
  8926.  move.b (a2)+,24(a0)
  8927.  move.b (a2)+,24*2(a0)
  8928.  move.b (a2)+,24*3(a0)
  8929.  move.b (a2)+,24*4(a0)
  8930.  move.b (a2)+,24*5(a0)
  8931.  move.b (a2)+,24*6(a0)
  8932.  move.b (a2)+,24*7(a0)
  8933.  subq #1,a0
  8934.  swap d0
  8935.  ext.l d0
  8936.  dbra d2,digitlop3
  8937.  
  8938. dontshowtime:
  8939.  
  8940.  
  8941.  move.l alanptr,a0
  8942.  move.l (a0)+,alframe
  8943.  cmp.l #endalan,a0
  8944.  blt.s nostartalan
  8945.  move.l #alan,a0
  8946. nostartalan:
  8947.  move.l a0,alanptr
  8948.  
  8949.  
  8950.  tst.b READCONTROLS
  8951.  beq.s nocontrols
  8952.  
  8953.  cmp.b #'s',mors
  8954.  beq.s control2
  8955.  
  8956.  tst.b PLR1MOUSE
  8957.  beq.s PLR1_nomouse
  8958.  bsr PLR1_mouse_control
  8959. PLR1_nomouse:
  8960.  tst.b PLR1KEYS
  8961.  beq.s PLR1_nokeys
  8962.  bsr PLR1_keyboard_control
  8963. PLR1_nokeys:
  8964. ; tst.b PLR1PATH
  8965. ; beq.s PLR1_nopath
  8966. ; bsr PLR1_follow_path
  8967. ;PLR1_nopath:
  8968.  tst.b PLR1JOY
  8969.  beq.s PLR1_nojoy
  8970.  bsr PLR1_JoyStick_control
  8971. PLR1_nojoy: 
  8972.  bra.s nocontrols
  8973.  
  8974. control2:
  8975.  tst.b PLR2MOUSE
  8976.  beq.s PLR2_nomouse
  8977.  bsr PLR2_mouse_control
  8978. PLR2_nomouse:
  8979.  tst.b PLR2KEYS
  8980.  beq.s PLR2_nokeys
  8981.  bsr PLR2_keyboard_control
  8982. PLR2_nokeys:
  8983. ; tst.b PLR2PATH
  8984. ; beq.s PLR2_nopath
  8985. ; bsr PLR1_follow_path
  8986. ;PLR2_nopath:
  8987.  tst.b PLR2JOY
  8988.  beq.s PLR2_nojoy
  8989.  bsr PLR2_JoyStick_control
  8990. PLR2_nojoy: 
  8991.  
  8992.  
  8993. nocontrols:
  8994.  
  8995.  move.l #$dff000,a6
  8996.  
  8997.  cmp.b #'4',Prefsfile+1
  8998.  bne.s nomuckabout
  8999.  
  9000.  move.w #$0,d0 
  9001.  tst.b NoiseMade0LEFT
  9002.  beq.s noturnoff0
  9003.  move.w #1,d0
  9004. noturnoff0:
  9005.  tst.b NoiseMade0RIGHT
  9006.  beq.s noturnoff1
  9007.  or.w #2,d0
  9008. noturnoff1:
  9009.  tst.b NoiseMade1RIGHT
  9010.  beq.s noturnoff2
  9011.  or.w #4,d0
  9012. noturnoff2:
  9013.  tst.b NoiseMade1LEFT
  9014.  beq.s noturnoff3
  9015.  or.w #8,d0
  9016. noturnoff3:
  9017.     move.w d0,dmacon(a6)
  9018.  
  9019. nomuckabout:
  9020.  
  9021.  
  9022. ; tst.b PLR2_fire
  9023. ; beq.s firenotpressed2
  9024. ; fire was pressed last time.
  9025. ; btst #7,$bfe001
  9026. ; bne.s firenownotpressed2
  9027. ; fire is still pressed this time.
  9028. ; st PLR2_fire
  9029. ; bra dointer
  9030.  
  9031. firenownotpressed2:
  9032. ; fire has been released.
  9033. ; clr.b PLR2_fire
  9034. ; bra dointer
  9035.  
  9036. firenotpressed2
  9037.  
  9038. ; fire was not pressed last frame...
  9039.  
  9040. ; btst #7,$bfe001
  9041. ; if it has still not been pressed, go back above
  9042. ; bne.s firenownotpressed2
  9043. ; fire was not pressed last time, and was this time, so has
  9044. ; been clicked.
  9045. ; st PLR2_clicked
  9046. ; st PLR2_fire
  9047.  
  9048. dointer
  9049.  
  9050. JUSTSOUNDS:
  9051.  
  9052.  tst.b dosounds
  9053.  beq.s .notthing
  9054.  
  9055.  cmp.b #'4',Prefsfile+1
  9056.     beq fourchannel
  9057.  
  9058.  btst #1,$dff000+intreqr
  9059.     bne.s newsampbitl
  9060.  
  9061. .notthing:
  9062.  
  9063.  movem.l (a7)+,d0-d7/a0-a6
  9064.  
  9065.  moveq #0,d0
  9066.  rts
  9067.  
  9068.  
  9069. dosounds: dc.w 0
  9070.  
  9071. swappedem: dc.w 0
  9072.  
  9073. newsampbitl:
  9074.  
  9075.  move.w #$820f,$dff000+dmacon
  9076.  
  9077.  move.w #$200,$dff000+intreq
  9078.  
  9079. ; tst.b CHANNELDATA
  9080. ; bne nochannel0
  9081.  
  9082.  move.l pos0LEFT,a0
  9083.  move.l pos2LEFT,a1
  9084.  
  9085.  move.l #tab,a2
  9086.  
  9087.  moveq #0,d0
  9088.  moveq #0,d1
  9089.  move.b vol0left,d0
  9090.  move.b vol2left,d1
  9091.  cmp.b d1,d0
  9092.  slt swappedem
  9093.  bge.s fbig0
  9094.  
  9095. ; d1 is bigger so scale d0 and use d1
  9096. ; as audiochannel volume.
  9097.  
  9098.  exg a0,a1
  9099.  asl.w #6,d0
  9100.  divs d1,d0
  9101.  lsl.w #8,d0
  9102.  adda.w d0,a2
  9103.  move.w d1,$dff0a8
  9104.  bra.s donechan0
  9105.  
  9106. fbig0:
  9107.  tst.w d0
  9108.  beq.s donechan0
  9109.  asl.w #6,d1
  9110.  divs d0,d1
  9111.  lsl.w #8,d1
  9112.  adda.w d1,a2
  9113.  move.w d0,$dff0a8
  9114.  
  9115. donechan0:
  9116.  
  9117.  move.l Aupt0,a3
  9118.  move.l a3,$dff0a0
  9119.  move.l Auback0,Aupt0
  9120.  move.l a3,Auback0
  9121.  
  9122.  move.l Auback0,a3
  9123.  
  9124.  moveq #0,d0
  9125.  moveq #0,d1
  9126.  moveq #0,d2
  9127.  moveq #0,d3
  9128.  moveq #0,d4
  9129.  moveq #0,d5
  9130.  move.w #49,d7
  9131. loop:
  9132.  move.l (a0)+,d0
  9133.  move.b (a1)+,d1
  9134.  move.b (a1)+,d2
  9135.  move.b (a1)+,d3
  9136.  move.b (a1)+,d4
  9137.  move.b (a2,d3.w),d5
  9138.  swap d5
  9139.  move.b (a2,d1.w),d5
  9140.  asl.l #8,d5
  9141.  move.b (a2,d2.w),d5
  9142.  swap d5
  9143.  move.b (a2,d4.w),d5
  9144.  add.l d5,d0
  9145.  move.l d0,(a3)+
  9146.  dbra d7,loop
  9147.  
  9148.  tst.b swappedem
  9149.  beq.s .ok23
  9150.  exg a0,a1
  9151. .ok23:
  9152.  
  9153.  cmp.l Samp0endLEFT,a0
  9154.  blt.s .notoffendsamp1
  9155.  move.l #empty,a0
  9156.  move.l #emptyend,Samp0endLEFT
  9157.  move.b #0,vol0left
  9158.  st LEFTCHANDATA+1
  9159.  move.w #0,LEFTCHANDATA+2
  9160. .notoffendsamp1:
  9161.  
  9162.  cmp.l Samp2endLEFT,a1
  9163.  blt.s .notoffendsamp2
  9164.  move.l #empty,a1
  9165.  move.l #emptyend,Samp2endLEFT
  9166.  move.b #0,vol2left
  9167.  st LEFTCHANDATA+1+8
  9168.  move.w #0,LEFTCHANDATA+2+8
  9169. .notoffendsamp2:
  9170.  
  9171.  move.l a0,pos0LEFT
  9172.  move.l a1,pos2LEFT
  9173.  
  9174. nochannel0:
  9175.  
  9176.  tst.b CHANNELDATA+16
  9177.  bne nochannel1
  9178.  
  9179.  
  9180.  move.l pos0RIGHT,a0
  9181.  move.l pos2RIGHT,a1
  9182.  
  9183.  move.l Aupt1,a3
  9184.  move.l a3,$dff0b0
  9185.  move.l Auback1,Aupt1
  9186.  move.l a3,Auback1
  9187.  
  9188.  move.l #tab,a2
  9189.  
  9190.  moveq #0,d0
  9191.  moveq #0,d1
  9192.  move.b vol0right,d0
  9193.  move.b vol2right,d1
  9194.  cmp.b d1,d0
  9195.  slt swappedem
  9196.  bge.s fbig1
  9197.  
  9198. ; d1 is bigger so scale d0 and use d1
  9199. ; as audiochannel volume.
  9200.  
  9201.  exg a0,a1
  9202.  asl.w #6,d0
  9203.  divs d1,d0
  9204.  lsl.w #8,d0
  9205.  adda.w d0,a2
  9206.  move.w d1,$dff0b8
  9207.  bra.s donechan1
  9208.  
  9209. fbig1:
  9210.  tst.w d0
  9211.  beq.s donechan1
  9212.  asl.w #6,d1
  9213.  divs d0,d1
  9214.  lsl.w #8,d1
  9215.  adda.w d1,a2
  9216.  move.w d0,$dff0b8
  9217.  
  9218. donechan1:
  9219.  moveq #0,d0
  9220.  moveq #0,d1
  9221.  moveq #0,d2
  9222.  moveq #0,d3
  9223.  moveq #0,d4
  9224.  moveq #0,d5
  9225.  move.w #49,d7
  9226. loop2:
  9227.  move.l (a0)+,d0
  9228.  move.b (a1)+,d1
  9229.  move.b (a1)+,d2
  9230.  move.b (a1)+,d3
  9231.  move.b (a1)+,d4
  9232.  move.b (a2,d3.w),d5
  9233.  swap d5
  9234.  move.b (a2,d1.w),d5
  9235.  asl.l #8,d5
  9236.  move.b (a2,d2.w),d5
  9237.  swap d5
  9238.  move.b (a2,d4.w),d5
  9239.  add.l d5,d0
  9240.  move.l d0,(a3)+
  9241.  dbra d7,loop2
  9242.  
  9243.  tst.b swappedem
  9244.  beq.s ok01
  9245.  exg a0,a1
  9246. ok01:
  9247.  
  9248.  cmp.l Samp0endRIGHT,a0
  9249.  blt.s .notoffendsamp1
  9250.  move.l #empty,a0
  9251.  move.l #emptyend,Samp0endRIGHT
  9252.  move.b #0,vol0right
  9253.  st RIGHTCHANDATA+1
  9254.  move.w #0,RIGHTCHANDATA+2
  9255. .notoffendsamp1:
  9256.  
  9257.  cmp.l Samp2endRIGHT,a1
  9258.  blt.s .notoffendsamp2
  9259.  move.l #empty,a1
  9260.  move.l #emptyend,Samp2endRIGHT
  9261.  move.b #0,vol2right
  9262.  st RIGHTCHANDATA+1+8
  9263.  move.w #0,RIGHTCHANDATA+2+8
  9264. .notoffendsamp2:
  9265.  
  9266.  move.l a0,pos0RIGHT
  9267.  move.l a1,pos2RIGHT
  9268.  
  9269. nochannel1:
  9270.  
  9271. ******************* Other two channels
  9272.  
  9273.  move.l pos1LEFT,a0
  9274.  move.l pos3LEFT,a1
  9275.  
  9276.  move.l #tab,a2
  9277.  
  9278.  moveq #0,d0
  9279.  moveq #0,d1
  9280.  move.b vol1left,d0
  9281.  move.b vol3left,d1
  9282.  cmp.b d1,d0
  9283.  slt swappedem
  9284.  bge.s fbig2
  9285.  
  9286. ; d1 is bigger so scale d0 and use d1
  9287. ; as audiochannel volume.
  9288.  
  9289.  exg a0,a1
  9290.  asl.w #6,d0
  9291.  divs d1,d0
  9292.  lsl.w #8,d0
  9293.  adda.w d0,a2
  9294.  move.w d1,$dff0d8
  9295.  bra.s donechan2
  9296.  
  9297. fbig2:
  9298.  tst.w d0
  9299.  beq.s donechan2
  9300.  asl.w #6,d1
  9301.  divs d0,d1
  9302.  lsl.w #8,d1
  9303.  adda.w d1,a2
  9304.  move.w d0,$dff0d8
  9305.  
  9306. donechan2:
  9307.  
  9308.  move.l Aupt2,a3
  9309.  move.l a3,$dff0d0
  9310.  move.l Auback2,Aupt2
  9311.  move.l a3,Auback2
  9312.  
  9313.  moveq #0,d0
  9314.  moveq #0,d1
  9315.  moveq #0,d2
  9316.  moveq #0,d3
  9317.  moveq #0,d4
  9318.  moveq #0,d5
  9319.  move.w #49,d7
  9320. loop3:
  9321.  move.l (a0)+,d0
  9322.  move.b (a1)+,d1
  9323.  move.b (a1)+,d2
  9324.  move.b (a1)+,d3
  9325.  move.b (a1)+,d4
  9326.  move.b (a2,d3.w),d5
  9327.  swap d5
  9328.  move.b (a2,d1.w),d5
  9329.  asl.l #8,d5
  9330.  move.b (a2,d2.w),d5
  9331.  swap d5
  9332.  move.b (a2,d4.w),d5
  9333.  add.l d5,d0
  9334.  move.l d0,(a3)+
  9335.  dbra d7,loop3
  9336.  
  9337.  tst.b swappedem
  9338.  beq.s .ok23
  9339.  exg a0,a1
  9340. .ok23:
  9341.  
  9342.  cmp.l Samp1endLEFT,a0
  9343.  blt.s .notoffendsamp3
  9344.  move.l #empty,a0
  9345.  move.l #emptyend,Samp1endLEFT
  9346.  move.b #0,vol1left
  9347.  st LEFTCHANDATA+1+4
  9348.  move.w #0,LEFTCHANDATA+2+4
  9349. .notoffendsamp3:
  9350.  
  9351.  cmp.l Samp3endLEFT,a1
  9352.  blt.s .notoffendsamp4
  9353.  move.l #empty,a1
  9354.  move.l #emptyend,Samp3endLEFT
  9355.  move.b #0,vol3left
  9356.  st LEFTCHANDATA+1+12
  9357.  move.w #0,LEFTCHANDATA+2+12
  9358. .notoffendsamp4:
  9359.  
  9360.  move.l a0,pos1LEFT
  9361.  move.l a1,pos3LEFT
  9362.  
  9363.  move.l pos1RIGHT,a0
  9364.  move.l pos3RIGHT,a1
  9365.  
  9366.  move.l Aupt3,a3
  9367.  move.l a3,$dff0c0
  9368.  move.l Auback3,Aupt3
  9369.  move.l a3,Auback3
  9370.  
  9371.  move.l #tab,a2
  9372.  
  9373.  moveq #0,d0
  9374.  moveq #0,d1
  9375.  move.b vol1right,d0
  9376.  move.b vol3right,d1
  9377.  cmp.b d1,d0
  9378.  slt.s swappedem
  9379.  bge.s fbig3
  9380.  
  9381.  exg a0,a1
  9382.  asl.w #6,d0
  9383.  divs d1,d0
  9384.  lsl.w #8,d0
  9385.  adda.w d0,a2
  9386.  move.w d1,$dff0c8
  9387.  bra.s donechan3
  9388.  
  9389. fbig3:
  9390.  tst.w d0
  9391.  beq.s donechan3
  9392.  asl.w #6,d1
  9393.  divs d0,d1
  9394.  lsl.w #8,d1
  9395.  adda.w d1,a2
  9396.  move.w d0,$dff0c8
  9397. donechan3:
  9398.  
  9399.  moveq #0,d0
  9400.  moveq #0,d1
  9401.  moveq #0,d2
  9402.  moveq #0,d3
  9403.  moveq #0,d4
  9404.  moveq #0,d5
  9405.  move.w #49,d7
  9406. loop4:
  9407.  move.l (a0)+,d0
  9408.  move.b (a1)+,d1
  9409.  move.b (a1)+,d2
  9410.  move.b (a1)+,d3
  9411.  move.b (a1)+,d4
  9412.  move.b (a2,d3.w),d5
  9413.  swap d5
  9414.  move.b (a2,d1.w),d5
  9415.  asl.l #8,d5
  9416.  move.b (a2,d2.w),d5
  9417.  swap d5
  9418.  move.b (a2,d4.w),d5
  9419.  add.l d5,d0
  9420.  move.l d0,(a3)+
  9421.  dbra d7,loop4
  9422.  
  9423.  tst.b swappedem
  9424.  beq.s .ok23
  9425.  exg a0,a1
  9426. .ok23:
  9427.  
  9428.  cmp.l Samp1endRIGHT,a0
  9429.  blt.s notoffendsamp3
  9430.  move.l #empty,a0
  9431.  move.l #emptyend,Samp1endRIGHT
  9432.  move.b #0,vol1right
  9433.  st RIGHTCHANDATA+1+4
  9434.  move.w #0,RIGHTCHANDATA+2+4
  9435. notoffendsamp3:
  9436.  
  9437.  cmp.l Samp3endRIGHT,a1
  9438.  blt.s notoffendsamp4
  9439.  move.l #empty,a1
  9440.  move.l #emptyend,Samp3endRIGHT
  9441.  move.b #0,vol3right
  9442.  st RIGHTCHANDATA+1+12
  9443.  move.w #0,RIGHTCHANDATA+2+12
  9444. notoffendsamp4:
  9445.  
  9446.  move.l a0,pos1RIGHT
  9447.  move.l a1,pos3RIGHT
  9448.  
  9449.  movem.l (a7)+,d0-d7/a0-a6
  9450.  tst.b counting
  9451.  beq .nostartcounter
  9452.  JSR STARTCOUNT
  9453. .nostartcounter:
  9454.  
  9455.  moveq #0,d0
  9456.  rts
  9457.  
  9458. ***********************************
  9459. * 4 channel sound routine
  9460. ***********************************
  9461.  
  9462. fourchannel:
  9463.  
  9464.  move.l #$dff000,a6
  9465.  
  9466.  btst #7,intreqrl(a6)
  9467.  beq.s nofinish0
  9468. ; move.w #0,LEFTCHANDATA+2
  9469. ; st LEFTCHANDATA+1
  9470.  move.l #null,$a0(a6)
  9471.  move.w #100,$a4(a6) 
  9472.  move.w #$0080,intreq(a6)
  9473. nofinish0:
  9474.  
  9475.  tst.b NoiseMade0pLEFT
  9476.  beq.s NoChan0sound
  9477.  
  9478.  move.l Samp0endLEFT,d0
  9479.  move.l pos0LEFT,d1
  9480.  sub.l d1,d0
  9481.  lsr.l #1,d0
  9482.  move.w d0,$a4(a6)
  9483.  move.l d1,$a0(a6)
  9484.  move.w #$8201,dmacon(a6)
  9485.  moveq #0,d0
  9486.  move.b vol0left,d0
  9487.  move.w d0,$a8(a6)
  9488.  
  9489. NoChan0sound:
  9490.  
  9491. *****************************************
  9492. *****************************************
  9493.  
  9494.  btst #0,intreqr(a6)
  9495.  beq.s nofinish1
  9496.  move.l #null,$b0(a6)
  9497.  move.w #100,$b4(a6)
  9498.  move.w #$0100,intreq(a6)
  9499. nofinish1:
  9500.  
  9501.  tst.b NoiseMade0pRIGHT
  9502.  beq.s NoChan1sound
  9503.  
  9504.  move.l Samp0endRIGHT,d0
  9505.  move.l pos0RIGHT,d1
  9506.  sub.l d1,d0
  9507.  lsr.l #1,d0
  9508.  move.w d0,$b4(a6)
  9509.  move.l d1,$b0(a6)
  9510.  move.w d0,playnull1
  9511.  move.w #$8202,dmacon(a6)
  9512.  moveq #0,d0
  9513.  move.b vol0right,d0
  9514.  move.w d0,$b8(a6)
  9515.  
  9516. NoChan1sound:
  9517.  
  9518. *****************************************
  9519. *****************************************
  9520.  
  9521.  btst #1,intreqr(a6)
  9522.  beq.s nofinish2
  9523.  move.l #null,$c0(a6)
  9524.  move.w #100,$c4(a6)
  9525.  move.w #$0200,intreq(a6)
  9526. nofinish2:
  9527.  
  9528.  tst.b NoiseMade1pRIGHT
  9529.  beq.s NoChan2sound
  9530.  
  9531.  move.l Samp1endRIGHT,d0
  9532.  move.l pos1RIGHT,d1
  9533.  sub.l d1,d0
  9534.  lsr.l #1,d0
  9535.  move.w d0,$c4(a6)
  9536.  move.w d0,playnull2
  9537.  
  9538.  move.l d1,$c0(a6)
  9539.  move.w #$8204,dmacon(a6)
  9540.  moveq #0,d0
  9541.  move.b vol1right,d0
  9542.  move.w d0,$c8(a6)
  9543.  
  9544. NoChan2sound:
  9545.  
  9546. *****************************************
  9547. *****************************************
  9548.  
  9549.  btst #2,intreqr(a6)
  9550.  beq.s nofinish3
  9551.  move.l #null,$d0(a6)
  9552.  move.w #100,$d4(a6)
  9553.  move.w #$0400,intreq(a6)
  9554. nofinish3:
  9555.  
  9556.  tst.b NoiseMade1pLEFT
  9557.  beq.s NoChan3sound
  9558.  
  9559.  move.l Samp1endLEFT,d0
  9560.  move.l pos1LEFT,d1
  9561.  sub.l d1,d0
  9562.  lsr.l #1,d0
  9563.  move.w d0,$d4(a6)
  9564.  move.w d0,playnull3
  9565.  move.l d1,$d0(a6)
  9566.  move.w #$8208,dmacon(a6)
  9567.  moveq #0,d0
  9568.  move.b vol1left,d0
  9569.  move.w d0,$d8(a6)
  9570.  
  9571. NoChan3sound:
  9572.  
  9573. nomorechannels:
  9574.  
  9575.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  9576.  move.l #0,NoiseMade0LEFT
  9577.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  9578.  move.l #0,NoiseMade0RIGHT
  9579.  
  9580. ; tst.b playnull0
  9581. ; beq.s .nnul
  9582. ; sub.b #1,playnull0
  9583. ; bra.s chan0still
  9584. ;.nnul:
  9585. ;chan0still:
  9586.  
  9587.  tst.b NoiseMade0pLEFT
  9588.  bne.s chan0still
  9589.  tst.w playnull0
  9590.  beq.s nnul0
  9591.  sub.w #100,playnull0
  9592.  bra.s chan0still
  9593. nnul0:
  9594.  move.w #0,LEFTCHANDATA+2
  9595.  st LEFTCHANDATA+1
  9596. chan0still:
  9597.  
  9598.  tst.b NoiseMade0pRIGHT
  9599.  bne.s chan1still
  9600.  tst.w playnull1
  9601.  beq.s nnul1
  9602.  sub.w #100,playnull1
  9603.  bra.s chan1still
  9604. nnul1:
  9605.  move.w #0,RIGHTCHANDATA+2
  9606.  st RIGHTCHANDATA+1
  9607. chan1still:
  9608.  
  9609.  tst.b NoiseMade1pRIGHT
  9610.  bne.s chan2still
  9611.  tst.w playnull2
  9612.  beq.s nnul2
  9613.  sub.w #100,playnull2
  9614.  bra.s chan2still
  9615. nnul2:
  9616.  move.w #0,RIGHTCHANDATA+2+4
  9617.  st RIGHTCHANDATA+1+4
  9618. chan2still:
  9619.  
  9620.  tst.b NoiseMade1pLEFT
  9621.  bne.s chan3still
  9622.  tst.w playnull3
  9623.  beq.s nnul3
  9624.  sub.w #100,playnull3
  9625.  bra.s chan3still
  9626. nnul3:
  9627.  move.w #0,LEFTCHANDATA+2+4
  9628.  st LEFTCHANDATA+1+4
  9629.  
  9630. chan3still:
  9631.  
  9632.  
  9633.  movem.l (a7)+,d0-d7/a0-a6
  9634.  
  9635.  moveq #0,d0
  9636.  rts
  9637.  
  9638. backbeat: dc.w 0
  9639.  
  9640. playnull0: dc.w 0
  9641. playnull1: dc.w 0
  9642. playnull2: dc.w 0
  9643. playnull3: dc.w 0
  9644.  
  9645. Samp0endRIGHT: dc.l emptyend
  9646. Samp1endRIGHT: dc.l emptyend
  9647. Samp2endRIGHT: dc.l emptyend
  9648. Samp3endRIGHT: dc.l emptyend
  9649. Samp0endLEFT: dc.l emptyend
  9650. Samp1endLEFT: dc.l emptyend
  9651. Samp2endLEFT: dc.l emptyend
  9652. Samp3endLEFT: dc.l emptyend
  9653.  
  9654. Aupt0: dc.l null
  9655. Auback0: dc.l null+500
  9656. Aupt2: dc.l null3
  9657. Auback2: dc.l null3+500
  9658. Aupt3: dc.l null4
  9659. Auback3: dc.l null4+500
  9660. Aupt1: dc.l null2
  9661. Auback1: dc.l null2+500
  9662.  
  9663. NoiseMade0LEFT: dc.b 0
  9664. NoiseMade1LEFT: dc.b 0
  9665. NoiseMade2LEFT: dc.b 0
  9666. NoiseMade3LEFT: dc.b 0
  9667. NoiseMade0pLEFT: dc.b 0
  9668. NoiseMade1pLEFT: dc.b 0
  9669. NoiseMade2pLEFT: dc.b 0
  9670. NoiseMade3pLEFT: dc.b 0
  9671. NoiseMade0RIGHT: dc.b 0
  9672. NoiseMade1RIGHT: dc.b 0
  9673. NoiseMade2RIGHT: dc.b 0
  9674. NoiseMade3RIGHT: dc.b 0
  9675. NoiseMade0pRIGHT: dc.b 0
  9676. NoiseMade1pRIGHT: dc.b 0
  9677. NoiseMade2pRIGHT: dc.b 0
  9678. NoiseMade3pRIGHT: dc.b 0
  9679.  
  9680. empty: ds.l 100
  9681. emptyend:
  9682.  
  9683. **************************************
  9684. * I want a routine to calculate all the
  9685. * info needed for the sound player to
  9686. * work, given say position of noise, volume
  9687. * and sample number.
  9688.  
  9689. Samplenum: dc.w 0
  9690. Noisex: dc.w 0
  9691. Noisez: dc.w 0
  9692. Noisevol: dc.w 0
  9693. chanpick: dc.w 0
  9694. IDNUM: dc.w 0
  9695. needleft: dc.b 0
  9696. needright: dc.b 0
  9697. STEREO: dc.b $0
  9698. even
  9699. prot6: dc.w 0
  9700.  
  9701.  even
  9702.  
  9703. CHANNELDATA:
  9704. LEFTCHANDATA:
  9705.  dc.l $00000000
  9706.  dc.l $00000000
  9707.  dc.l $FF000000
  9708.  dc.l $FF000000
  9709. RIGHTCHANDATA:
  9710.  dc.l $00000000
  9711.  dc.l $00000000
  9712.  dc.l $FF000000
  9713.  dc.l $FF000000
  9714.  
  9715. RIGHTPLAYEDTAB: ds.l 20
  9716. LEFTPLAYEDTAB: ds.l 20
  9717.  
  9718. MakeSomeNoise:
  9719.  
  9720. ; Plan for new sound handler:
  9721. ; It is sent a sample number,
  9722. ; a position relative to the
  9723. ; player, an id number and a volume.
  9724. ; Also notifplaying.
  9725.  
  9726. ; indirect inputs are the available
  9727. ; channel flags and whether or not
  9728. ; stereo sound is selected.
  9729.  
  9730. ; the algorithm must decide
  9731. ; whether the new sound is more
  9732. ; important than the ones already
  9733. ; playing. Thus an 'importance'
  9734. ; must be calculated, probably
  9735. ; using volume.
  9736.  
  9737. ; The output needs to be:
  9738.  
  9739. ; Write the pointers and volumes of
  9740. ; the sound channels
  9741.  
  9742.  
  9743.  tst.b notifplaying
  9744.  beq.s dontworry
  9745.  
  9746. ; find if we are already playing
  9747.  
  9748.  move.b IDNUM,d0
  9749.  move.w #7,d1
  9750.  lea CHANNELDATA,a3
  9751. findsameasme
  9752.  tst.b (a3)
  9753.  bne.s notavail
  9754.  cmp.b 1(a3),d0
  9755.  beq SameAsMe
  9756. notavail:
  9757.  add.w #4,a3
  9758.  dbra d1,findsameasme
  9759.  bra dontworry
  9760. SameAsMe
  9761.  rts
  9762.  
  9763. noiseloud: dc.w 0
  9764.  
  9765. dontworry:
  9766.  
  9767. ; Ok its fine for us to play a sound.
  9768. ; So calculate left/right volume.
  9769.  
  9770.  move.w Noisex,d1
  9771.  muls d1,d1
  9772.  move.w Noisez,d2
  9773.  muls d2,d2
  9774.  move.w #64,d3
  9775.  move.w #32767,noiseloud
  9776.  moveq #1,d0
  9777.  add.l d1,d2
  9778.  beq pastcalc
  9779.  
  9780.  move.w #31,d0
  9781. .findhigh
  9782.  btst d0,d2
  9783.  bne .foundhigh
  9784.  dbra d0,.findhigh
  9785. .foundhigh
  9786.  asr.w #1,d0
  9787.  clr.l d3
  9788.  bset d0,d3
  9789.  move.l d3,d0
  9790.  
  9791.  move.w d0,d3
  9792.  muls d3,d3    ; x*x
  9793.  sub.l d2,d3    ; x*x-a
  9794.  asr.l #1,d3    ; (x*x-a)/2
  9795.  divs d0,d3    ; (x*x-a)/2x
  9796.  sub.w d3,d0    ; second approx
  9797.  bgt .stillnot0
  9798.  move.w #1,d0
  9799. .stillnot0
  9800.  
  9801.  move.w d0,d3
  9802.  muls d3,d3
  9803.  sub.l d2,d3
  9804.  asr.l #1,d3
  9805.  divs d0,d3
  9806.  sub.w d3,d0    ; second approx
  9807.  bgt .stillnot02
  9808.  move.w #1,d0
  9809. .stillnot02
  9810.  
  9811.  move.w Noisevol,d3
  9812.  ext.l d3
  9813.  asl.l #6,d3
  9814.  cmp.l #32767,d3
  9815.  ble.s .nnnn
  9816.  move.l #32767,d3
  9817. .nnnn
  9818.  
  9819.  asr.w #2,d0
  9820.  addq #1,d0
  9821.  divs d0,d3
  9822.  
  9823.  move.w d3,noiseloud
  9824.  
  9825.  cmp.w #64,d3
  9826.  ble.s notooloud
  9827.  move.w #64,d3
  9828. notooloud:
  9829.  
  9830. pastcalc:
  9831.  
  9832.     ; d3 contains volume of noise.
  9833.     
  9834.  move.w d3,d4
  9835.  tst.b STEREO
  9836.  beq NOSTEREO
  9837.  
  9838.  move.w d3,d2
  9839.  muls Noisex,d2
  9840.  asl.w #2,d0
  9841.  divs d0,d2
  9842.  
  9843.  bgt.s quietleft
  9844.  add.w d2,d4
  9845.  bge.s donequiet
  9846.  move.w #0,d4
  9847.  bra.s donequiet
  9848. quietleft:
  9849.  sub.w d2,d3
  9850.  bge.s donequiet
  9851.  move.w #0,d3
  9852. donequiet:
  9853.  
  9854. ; d3=leftvol?
  9855. ; d4=rightvol?
  9856.  
  9857.  clr.w needleft
  9858.  
  9859.  cmp.b d3,d4
  9860.  bgt.s RightLouder
  9861.  
  9862. ; Left is louder; is it MUCH louder?
  9863.  
  9864.  st needleft
  9865.  move.w d3,d2
  9866.  sub.w d4,d2
  9867.  cmp.w #32,d2
  9868.  slt needright
  9869.  bra aboutsame
  9870.  
  9871. RightLouder:
  9872.  st needright
  9873.  move.w d4,d2
  9874.  sub.w d3,d2
  9875.  cmp.w #32,d2
  9876.  slt needleft
  9877.  
  9878. aboutsame:
  9879.  
  9880.  
  9881. ; Find least important sound on left
  9882.  
  9883.  move.l #0,a2
  9884.  move.l #0,d5
  9885.  move.w #32767,d2
  9886.  move.b IDNUM,d0
  9887.  lea LEFTCHANDATA,a3
  9888.  move.w #3,d1
  9889. FindLeftChannel
  9890.  tst.b (a3)
  9891.  bne.s .notactive
  9892.  cmp.b 1(a3),d0
  9893.  beq.s FOUNDLEFT
  9894.  cmp.w 2(a3),d2
  9895.  blt.s .notactive
  9896.  move.w 2(a3),d2
  9897.  move.l a3,a2
  9898.  move.w d5,d6
  9899.  
  9900. .notactive:
  9901.  add.w #4,a3
  9902.  add.w #1,d5
  9903.  dbra d1,FindLeftChannel
  9904.  move.l a2,a3
  9905.  bra.s gopastleft
  9906. FOUNDLEFT:
  9907.  move.w d5,d6
  9908. gopastleft:
  9909.  tst.l a3
  9910.  bne.s FOUNDALEFT
  9911.  rts
  9912. FOUNDALEFT:
  9913.  
  9914. ; d6 = channel number
  9915.  move.b d0,1(a3)
  9916.  move.w d3,2(a3)
  9917.  
  9918.  move.w Samplenum,d5
  9919.  move.l #SampleList,a3
  9920.  move.l (a3,d5.w*8),a1
  9921.  move.l 4(a3,d5.w*8),a2
  9922.  
  9923.  tst.b d6
  9924.  seq NoiseMade0LEFT
  9925.  beq.s .chan0
  9926.  cmp.b #2,d6
  9927.  slt NoiseMade1LEFT
  9928.  blt .chan1
  9929.  seq NoiseMade2LEFT
  9930.  beq .chan2
  9931.  st NoiseMade3LEFT
  9932.  
  9933.  move.b d5,LEFTPLAYEDTAB+9
  9934.  move.b d3,LEFTPLAYEDTAB+1+9
  9935.  move.b d4,LEFTPLAYEDTAB+2+9
  9936.  move.b d3,vol3left
  9937.  move.l a1,pos3LEFT
  9938.  move.l a2,Samp3endLEFT
  9939.  bra dorightchan
  9940.  
  9941. .chan0: 
  9942.  move.b d5,LEFTPLAYEDTAB
  9943.  move.b d3,LEFTPLAYEDTAB+1
  9944.  move.b d4,LEFTPLAYEDTAB+2
  9945.  move.l a1,pos0LEFT
  9946.  move.l a2,Samp0endLEFT
  9947.  move.b d3,vol0left
  9948.  bra dorightchan
  9949.  
  9950. .chan1:
  9951.  move.b d5,LEFTPLAYEDTAB+3
  9952.  move.b d3,LEFTPLAYEDTAB+1+3
  9953.  move.b d4,LEFTPLAYEDTAB+2+3
  9954.  move.b d3,vol1left
  9955.  move.l a1,pos1LEFT
  9956.  move.l a2,Samp1endLEFT
  9957.  bra dorightchan
  9958.  
  9959. .chan2: 
  9960.  move.b d5,LEFTPLAYEDTAB+6
  9961.  move.b d3,LEFTPLAYEDTAB+1+6
  9962.  move.b d4,LEFTPLAYEDTAB+2+6
  9963.  move.l a1,pos2LEFT
  9964.  move.l a2,Samp2endLEFT
  9965.  move.b d3,vol2left
  9966.  
  9967. dorightchan:
  9968.  
  9969. ; Find least important sound on right
  9970.  
  9971.  move.l #0,a2
  9972.  move.l #0,d5
  9973.  move.w #10000,d2
  9974.  move.b IDNUM,d0
  9975.  lea RIGHTCHANDATA,a3
  9976.  move.w #3,d1
  9977. FindRightChannel
  9978.  tst.b (a3)
  9979.  bne.s .notactive
  9980.  cmp.b 1(a3),d0
  9981.  beq.s FOUNDRIGHT
  9982.  cmp.w 2(a3),d2
  9983.  blt.s .notactive
  9984.  move.w 2(a3),d2
  9985.  move.l a3,a2
  9986.  move.w d5,d6
  9987.  
  9988. .notactive:
  9989.  add.w #4,a3
  9990.  add.w #1,d5
  9991.  dbra d1,FindRightChannel
  9992.  move.l a2,a3
  9993.  bra.s gopastright
  9994. FOUNDRIGHT:
  9995.  move.w d5,d6
  9996. gopastright:
  9997.  tst.l a3
  9998.  bne.s FOUNDARIGHT
  9999.  rts
  10000. FOUNDARIGHT:
  10001.  
  10002. ; d6 = channel number
  10003.  move.b d0,1(a3)
  10004.  move.w d3,2(a3)
  10005.  
  10006.  move.w Samplenum,d5
  10007.  move.l #SampleList,a3
  10008.  move.l (a3,d5.w*8),a1
  10009.  move.l 4(a3,d5.w*8),a2
  10010.  
  10011.  tst.b d6
  10012.  seq NoiseMade0RIGHT
  10013.  beq.s .chan0
  10014.  cmp.b #2,d6
  10015.  slt NoiseMade1RIGHT
  10016.  blt .chan1
  10017.  seq NoiseMade2RIGHT
  10018.  beq .chan2
  10019.  st NoiseMade3RIGHT
  10020.  
  10021.  move.b d5,RIGHTPLAYEDTAB+9
  10022.  move.b d3,RIGHTPLAYEDTAB+1+9
  10023.  move.b d4,RIGHTPLAYEDTAB+2+9
  10024.  move.b d4,vol3right
  10025.  move.l a1,pos3RIGHT
  10026.  move.l a2,Samp3endRIGHT
  10027.  rts
  10028.  
  10029. .chan0: 
  10030.  move.b d5,RIGHTPLAYEDTAB
  10031.  move.b d3,RIGHTPLAYEDTAB+1
  10032.  move.b d4,RIGHTPLAYEDTAB+2
  10033.  move.l a1,pos0RIGHT
  10034.  move.l a2,Samp0endRIGHT
  10035.  move.b d4,vol0right
  10036.  rts
  10037.  
  10038. .chan1:
  10039.  move.b d5,RIGHTPLAYEDTAB+3
  10040.  move.b d3,RIGHTPLAYEDTAB+1+3
  10041.  move.b d4,RIGHTPLAYEDTAB+2+3
  10042.  move.b d3,vol1right
  10043.  move.l a1,pos1RIGHT
  10044.  move.l a2,Samp1endRIGHT
  10045.  rts
  10046.  
  10047. .chan2: 
  10048.  move.b d5,RIGHTPLAYEDTAB+6
  10049.  move.b d3,RIGHTPLAYEDTAB+1+6
  10050.  move.b d4,RIGHTPLAYEDTAB+2+6
  10051.  move.l a1,pos2RIGHT
  10052.  move.l a2,Samp2endRIGHT
  10053.  move.b d3,vol2right
  10054.  rts
  10055.  
  10056. NOSTEREO:
  10057.  move.l #0,a2
  10058.  move.l #-1,d5
  10059.  move.w #32767,d2
  10060.  move.b IDNUM,d0
  10061.  lea CHANNELDATA,a3
  10062.  move.w #7,d1
  10063. FindChannel
  10064.  tst.b (a3)
  10065.  bne.s .notactive
  10066.  cmp.b 1(a3),d0
  10067.  beq.s FOUNDCHAN
  10068.  cmp.w 2(a3),d2
  10069.  blt.s .notactive
  10070.  move.w 2(a3),d2
  10071.  move.l a3,a2
  10072.  move.w d5,d6
  10073.  add.w #1,d6
  10074.  
  10075. .notactive:
  10076.  add.w #4,a3
  10077.  add.w #1,d5
  10078.  dbra d1,FindChannel
  10079.  
  10080.  move.l a2,a3
  10081.  bra.s gopastchan
  10082. FOUNDCHAN:
  10083.  move.w d5,d6
  10084.  add.w #1,d6
  10085. gopastchan:
  10086.  tst.w d6
  10087.  bge.s FOUNDACHAN
  10088. tooquiet:
  10089.  rts
  10090. FOUNDACHAN:
  10091.  
  10092. ; d6 = channel number
  10093.  
  10094.  cmp.w noiseloud,d2
  10095.  bgt.s tooquiet
  10096.  
  10097.  move.b d0,1(a3)
  10098.  move.w noiseloud,2(a3)
  10099.  
  10100.  move.w Samplenum,d5
  10101.  move.l #SampleList,a3
  10102.  move.l (a3,d5.w*8),a1
  10103.  move.l 4(a3,d5.w*8),a2
  10104.  
  10105.  tst.b d6
  10106.  beq .chan0
  10107.  cmp.b #2,d6
  10108.  blt .chan1
  10109.  beq .chan2
  10110.  cmp.b #4,d6
  10111.  blt .chan3
  10112.  beq .chan4
  10113.  cmp.b #6,d6
  10114.  blt .chan5
  10115.  beq .chan6
  10116.  st NoiseMade3RIGHT
  10117.  
  10118.  move.b d5,RIGHTPLAYEDTAB+9
  10119.  move.b d3,RIGHTPLAYEDTAB+1+9
  10120.  move.b d4,RIGHTPLAYEDTAB+2+9
  10121.  move.b d4,vol3right
  10122.  move.l a1,pos3RIGHT
  10123.  move.l a2,Samp3endRIGHT
  10124.  rts
  10125.  
  10126. .chan3:
  10127.  st NoiseMade3LEFT
  10128.  move.b d5,LEFTPLAYEDTAB+9
  10129.  move.b d3,LEFTPLAYEDTAB+1+9
  10130.  move.b d4,LEFTPLAYEDTAB+2+9
  10131.  move.b d3,vol3left
  10132.  move.l a1,pos3LEFT
  10133.  move.l a2,Samp3endLEFT
  10134.  bra dorightchan
  10135.  
  10136. .chan0: 
  10137.  st NoiseMade0LEFT
  10138.  move.b d5,LEFTPLAYEDTAB
  10139.  move.b d3,LEFTPLAYEDTAB+1
  10140.  move.b d4,LEFTPLAYEDTAB+2
  10141.  move.l a1,pos0LEFT
  10142.  move.l a2,Samp0endLEFT
  10143.  move.b d3,vol0left
  10144.  rts
  10145.  
  10146. .chan1:
  10147.  st NoiseMade1LEFT
  10148.  move.b d5,LEFTPLAYEDTAB+3
  10149.  move.b d3,LEFTPLAYEDTAB+1+3
  10150.  move.b d4,LEFTPLAYEDTAB+2+3
  10151.  move.b d3,vol1left
  10152.  move.l a1,pos1LEFT
  10153.  move.l a2,Samp1endLEFT
  10154.  rts
  10155.  
  10156. .chan2: 
  10157.  st NoiseMade2LEFT
  10158.  move.b d5,LEFTPLAYEDTAB+6
  10159.  move.b d3,LEFTPLAYEDTAB+1+6
  10160.  move.b d4,LEFTPLAYEDTAB+2+6
  10161.  move.l a1,pos2LEFT
  10162.  move.l a2,Samp2endLEFT
  10163.  move.b d3,vol2left
  10164.  rts
  10165.  
  10166. .chan4: 
  10167.  st NoiseMade0RIGHT
  10168.  move.b d5,RIGHTPLAYEDTAB
  10169.  move.b d3,RIGHTPLAYEDTAB+1
  10170.  move.b d4,RIGHTPLAYEDTAB+2
  10171.  move.l a1,pos0RIGHT
  10172.  move.l a2,Samp0endRIGHT
  10173.  move.b d4,vol0right
  10174.  rts
  10175.  
  10176. .chan5:
  10177.  st NoiseMade1RIGHT
  10178.  move.b d5,RIGHTPLAYEDTAB+3
  10179.  move.b d3,RIGHTPLAYEDTAB+1+3
  10180.  move.b d4,RIGHTPLAYEDTAB+2+3
  10181.  move.b d3,vol1right
  10182.  move.l a1,pos1RIGHT
  10183.  move.l a2,Samp1endRIGHT
  10184.  rts
  10185.  
  10186. .chan6: 
  10187.  st NoiseMade2RIGHT
  10188.  move.b d5,RIGHTPLAYEDTAB+6
  10189.  move.b d3,RIGHTPLAYEDTAB+1+6
  10190.  move.b d4,RIGHTPLAYEDTAB+2+6
  10191.  move.l a1,pos2RIGHT
  10192.  move.l a2,Samp2endRIGHT
  10193.  move.b d3,vol2right
  10194.  rts
  10195.  
  10196. SampleList:
  10197.  dc.l Scream,EndScream
  10198.  dc.l Shoot,EndShoot
  10199.  dc.l Munch,EndMunch
  10200.  dc.l PooGun,EndPooGun
  10201.  dc.l Collect,EndCollect
  10202. ;5
  10203.  dc.l DoorNoise,EndDoorNoise
  10204.  dc.l 0,0
  10205.  dc.l Stomp,EndStomp
  10206.  dc.l LowScream,EndLowScream
  10207.  dc.l BaddieGun,EndBaddieGun
  10208. ;10
  10209.  dc.l SwitchNoise,EndSwitch
  10210.  dc.l Reload,EndReload
  10211.  dc.l NoAmmo,EndNoAmmo
  10212.  dc.l Splotch,EndSplotch
  10213.  dc.l SplatPop,EndSplatPop
  10214. ;15
  10215.  dc.l Boom,EndBoom
  10216.  dc.l Hiss,EndHiss
  10217.  dc.l Howl1,EndHowl1
  10218.  dc.l Howl2,EndHowl2
  10219.  dc.l Pant,EndPant
  10220. ;20
  10221.  dc.l Whoosh,EndWhoosh
  10222.  dc.l ROAR,EndROAR
  10223.  dc.l whoosh,Endwhoosh
  10224.  dc.l 0,0
  10225.  dc.l 0,0
  10226.  dc.l 0,0
  10227.  dc.l 0,0
  10228.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  10229.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  10230.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  10231.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  10232.  
  10233.  dc.l 0
  10234.  
  10235. storeval: dc.w 0
  10236.  
  10237.  include "ab3:source_4000/wallchunk.s"
  10238.  include "ab3:source_4000/newloadfromdisk.s"
  10239.  include "ab3:source_4000/screensetup.s"
  10240.  include "ab3:source_4000/WBCONTROLLOOP.s"
  10241.  include "ab3:source_4000/WBSETUP"
  10242.  
  10243.  
  10244.  
  10245. saveinters:  
  10246.  dc.w 0
  10247.  
  10248. z: dc.w 10
  10249.  
  10250. notifplaying:
  10251.  dc.w 0
  10252.  
  10253. audpos1: dc.w 0
  10254. audpos1b: dc.w 0
  10255. audpos2: dc.w 0
  10256. audpos2b: dc.w 0
  10257. audpos3: dc.w 0
  10258. audpos3b: dc.w 0
  10259. audpos4: dc.w 0
  10260. audpos4b: dc.w 0
  10261.  
  10262. vol0left: dc.w 0
  10263. vol0right: dc.w 0
  10264. vol1left: dc.w 0
  10265. vol1right: dc.w 0
  10266. vol2left: dc.w 0
  10267. vol2right: dc.w 0
  10268. vol3left: dc.w 0
  10269. vol3right: dc.w 0
  10270.  
  10271. pos: dc.l 0
  10272.  
  10273. pos0LEFT: dc.l empty
  10274. pos1LEFT: dc.l empty
  10275. pos2LEFT: dc.l empty
  10276. pos3LEFT: dc.l empty
  10277. pos0RIGHT: dc.l empty
  10278. pos1RIGHT: dc.l empty
  10279. pos2RIGHT: dc.l empty
  10280. pos3RIGHT: dc.l empty
  10281.  
  10282. numtodo dc.w 0
  10283.  
  10284. npt: dc.w 0
  10285.  
  10286. pretab:
  10287. val SET 0
  10288.  REPT 128
  10289.  dc.b val
  10290. val SET val+1
  10291.  ENDR
  10292. val SET -128
  10293.  REPT 128
  10294.  dc.b val
  10295. val SET val+1
  10296.  ENDR 
  10297.  
  10298. tab:
  10299.  ds.b 256*65
  10300.  
  10301.  
  10302. test: dc.l 0
  10303.  ds.l 30
  10304.  
  10305.  even
  10306. ConstCols:
  10307. ; incbin "ConstCols"
  10308.  even
  10309. Smoothscalecols:
  10310. ; incbin "smoothbumppalscaled"
  10311.  even
  10312. SmoothTile:
  10313. ; incbin "smoothbumptile"
  10314.  even
  10315. Bumpscalecols:
  10316. ; incbin "Bumppalscaled"
  10317.  even
  10318. Bumptile:
  10319. ; incbin "bumptile"
  10320.  even
  10321. scalecols: ;incbin "bytepixpalscaled"
  10322.  even
  10323. floorscalecols:
  10324.  incbin "ab3:includes/floor256pal"
  10325.  ds.w 256*4
  10326.  
  10327.  even
  10328. PaletteAddr: dc.l 0
  10329. ChunkAddr: dc.l 0
  10330. ;walltiles:
  10331. ; dc.l GreenMechanicWALL
  10332. ; dc.l BlueGreyMetalWALL
  10333. ; dc.l TechnoDetailWALL
  10334. ; dc.l BlueStoneWALL
  10335. ; dc.l RedAlertWALL
  10336. ; dc.l RockWALL
  10337. ;
  10338. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  10339. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  10340. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  10341. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  10342. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  10343. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  10344.  
  10345. floortile:
  10346.  dc.l 0
  10347. ; incbin "floortile" 
  10348.  even
  10349. wallrouts:
  10350. ; incbin "2x2WallDraw" 
  10351.  CNOP 0,64
  10352. BackPicture:
  10353.  incbin "ab3:includes/rawback"
  10354. EndBackPicture:
  10355.  
  10356. drawpt: dc.l 0
  10357. olddrawpt: dc.l 0
  10358. frompt: dc.l 0 
  10359.  
  10360. SineTable:
  10361.  incbin "ab3:includes/bigsine"
  10362.  
  10363. angspd: dc.w 0
  10364. flooryoff: dc.w 0
  10365. xoff: dc.l 0
  10366. yoff: dc.l 0
  10367. yvel: dc.l 0
  10368. zoff: dc.l 0
  10369. tyoff: dc.l 0
  10370. xspdval: dc.l 0
  10371. zspdval: dc.l 0
  10372. Zone: dc.w 0
  10373.  
  10374. PLR1: dc.b $ff
  10375.  even
  10376. PLR1_energy: dc.w 191
  10377. PLR1_GunSelected: dc.w 0
  10378. PLR1_cosval: dc.w 0
  10379. PLR1_sinval: dc.w 0
  10380. PLR1_angpos: dc.w 0
  10381. PLR1_angspd: dc.w 0
  10382. PLR1_xoff: dc.l 0
  10383. PLR1_yoff: dc.l 0
  10384. PLR1_yvel: dc.l 0
  10385. PLR1_zoff: dc.l 0
  10386. PLR1_tyoff: dc.l 0
  10387. PLR1_xspdval: dc.l 0
  10388. PLR1_zspdval: dc.l 0
  10389. PLR1_Zone: dc.w 0
  10390. PLR1_Roompt: dc.l 0
  10391. PLR1_OldRoompt: dc.l 0
  10392. PLR1_PointsToRotatePtr: dc.l 0
  10393. PLR1_ListOfGraphRooms: dc.l 0
  10394. PLR1_oldxoff: dc.l 0
  10395. PLR1_oldzoff: dc.l 0
  10396. PLR1_StoodInTop: dc.b 0
  10397.  even
  10398. PLR1_height: dc.l 0
  10399.  
  10400.  ds.w 4
  10401.  
  10402. OLDX1: dc.l 0
  10403. OLDX2: dc.l 0
  10404. OLDZ1: dc.l 0
  10405. OLDZ2: dc.l 0
  10406.  
  10407. XDIFF1: dc.l 0
  10408. ZDIFF1: dc.l 0
  10409. XDIFF2: dc.l 0
  10410. ZDIFF2: dc.l 0
  10411.  
  10412. PLR1s_cosval: dc.w 0
  10413. PLR1s_sinval: dc.w 0
  10414. PLR1s_angpos: dc.w 0
  10415. PLR1s_angspd: dc.w 0
  10416. PLR1s_xoff: dc.l 0
  10417. PLR1s_yoff: dc.l 0
  10418. PLR1s_yvel: dc.l 0
  10419. PLR1s_zoff: dc.l 0
  10420. PLR1s_tyoff: dc.l 0
  10421. PLR1s_xspdval: dc.l 0
  10422. PLR1s_zspdval: dc.l 0
  10423. PLR1s_Zone: dc.w 0
  10424. PLR1s_Roompt: dc.l 0
  10425. PLR1s_OldRoompt: dc.l 0
  10426. PLR1s_PointsToRotatePtr: dc.l 0
  10427. PLR1s_ListOfGraphRooms: dc.l 0
  10428. PLR1s_oldxoff: dc.l 0
  10429. PLR1s_oldzoff: dc.l 0
  10430. PLR1s_height: dc.l 0
  10431. PLR1s_targheight: dc.l 0
  10432.  
  10433. p1_xoff: dc.l 0
  10434. p1_zoff: dc.l 0
  10435. p1_yoff: dc.l 0
  10436. p1_height: dc.l 0
  10437. p1_angpos: dc.w 0
  10438. p1_bobble: dc.w 0
  10439. p1_clicked: dc.b 0
  10440. p1_spctap: dc.b 0
  10441. p1_ducked: dc.b 0
  10442. p1_gunselected: dc.b 0
  10443. p1_fire: dc.b 0
  10444.  even
  10445. p1_holddown: dc.w 0
  10446.  
  10447.  ds.w 4
  10448.  
  10449. PLR2: dc.b $ff
  10450.  even
  10451. PLR2_GunSelected: dc.w 0
  10452. PLR2_energy: dc.w 191
  10453. PLR2_cosval: dc.w 0
  10454. PLR2_sinval: dc.w 0
  10455. PLR2_angpos: dc.w 0
  10456. PLR2_angspd: dc.w 0
  10457. PLR2_xoff: dc.l 0
  10458. PLR2_yoff: dc.l 0
  10459. PLR2_yvel: dc.l 0
  10460. PLR2_zoff: dc.l 0
  10461. PLR2_tyoff: dc.l 0
  10462. PLR2_xspdval: dc.l 0
  10463. PLR2_zspdval: dc.l 0
  10464. PLR2_Zone: dc.w 0
  10465. PLR2_Roompt: dc.l 0
  10466. PLR2_OldRoompt: dc.l 0
  10467. PLR2_PointsToRotatePtr: dc.l 0
  10468. PLR2_ListOfGraphRooms: dc.l 0
  10469. PLR2_oldxoff: dc.l 0
  10470. PLR2_oldzoff: dc.l 0
  10471. PLR2_StoodInTop: dc.b 0
  10472.  even
  10473. PLR2_height: dc.l 0
  10474.  
  10475.  ds.w 4
  10476.  
  10477. PLR2s_cosval: dc.w 0
  10478. PLR2s_sinval: dc.w 0
  10479. PLR2s_angpos: dc.w 0
  10480. PLR2s_angspd: dc.w 0
  10481. PLR2s_xoff: dc.l 0
  10482. PLR2s_yoff: dc.l 0
  10483. PLR2s_yvel: dc.l 0
  10484. PLR2s_zoff: dc.l 0
  10485. PLR2s_tyoff: dc.l 0
  10486. PLR2s_xspdval: dc.l 0
  10487. PLR2s_zspdval: dc.l 0
  10488. PLR2s_Zone: dc.w 0
  10489. PLR2s_Roompt: dc.l 0
  10490. PLR2s_OldRoompt: dc.l 0
  10491. PLR2s_PointsToRotatePtr: dc.l 0
  10492. PLR2s_ListOfGraphRooms: dc.l 0
  10493. PLR2s_oldxoff: dc.l 0
  10494. PLR2s_oldzoff: dc.l 0
  10495. PLR2s_height: dc.l 0
  10496. PLR2s_targheight: dc.l 0
  10497.  
  10498.  ds.w 4
  10499.  
  10500. p2_xoff: dc.l 0
  10501. p2_zoff: dc.l 0
  10502. p2_yoff: dc.l 0
  10503. p2_height: dc.l 0
  10504. p2_angpos: dc.w 0
  10505. p2_bobble: dc.w 0
  10506. p2_clicked: dc.b 0
  10507. p2_spctap: dc.b 0
  10508. p2_ducked: dc.b 0
  10509. p2_gunselected: dc.b 0
  10510. p2_fire: dc.b 0
  10511.  even
  10512. p2_holddown: dc.w 0
  10513.  
  10514. liftanimtab:
  10515.  
  10516. endliftanimtab:
  10517.  
  10518. glassball:
  10519. ; incbin "glassball.inc"
  10520.  
  10521. endglass
  10522. glassballpt: dc.l glassball
  10523.  
  10524. rndtab: ; incbin "randfile"
  10525. endrnd: 
  10526.  
  10527. brightanimtab:
  10528.  dcb.w 200,20
  10529.  dc.w 5
  10530.  dc.w 10,20
  10531.  dc.w 5
  10532.  dcb.w 30,20
  10533.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  10534.  dcb.w 40,0
  10535.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  10536.  dcb.w 300,0
  10537.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  10538.  dc.w -1
  10539.  
  10540. Roompt: dc.l 0
  10541. OldRoompt: dc.l 0
  10542.  
  10543. *****************************************************************
  10544.  *
  10545.  include "AB3:source_4000/LevelData2"
  10546.  *
  10547. *****************************************************************
  10548.  
  10549.  
  10550. wallpt: dc.l 0
  10551. floorpt: dc.l 0
  10552.  
  10553. Rotated:
  10554.  ds.l 2*800 
  10555. ObjRotated:
  10556.  ds.l 2*500
  10557.  
  10558. OnScreen:
  10559.  ds.l 2*800 
  10560.  
  10561. startwait: dc.w 0
  10562. endwait: dc.w 0
  10563.  
  10564. Faces:; incbin "faces2raw"
  10565.  
  10566. LINKS: ds.b 10000
  10567. FLYLINKS: ds.b 10000
  10568.  
  10569. *******************************************************************
  10570.  
  10571. consttab:
  10572.  incbin "ab3:includes/constantfile"
  10573.  
  10574. *******************************************************************
  10575.  
  10576.  
  10577.  
  10578. *********************************
  10579.  
  10580. ; include "ab3:source_4000/loadmod.a"
  10581. ; include "ab3:source_4000/proplayer.a"
  10582.  
  10583.  
  10584. darkentab: 
  10585. ;val SET 0
  10586. ; REPT 256
  10587. ; dc.b val
  10588. ;val SET val+1
  10589. ; ENDR
  10590.  incbin "ab3:includes/darkenfile"
  10591.  
  10592. MIDDLEX: dc.w 0
  10593. RIGHTX: dc.w 192
  10594. FULLSCR: dc.w 0
  10595.  
  10596. SHADINGTABLE: incbin "ab3:includes/SHADEFILE" 
  10597.  
  10598. ******************************************
  10599. * Link file !*****************************
  10600. ******************************************
  10601.  
  10602. LINKSPACE:
  10603.  incbin "ab3:includes/test.lnk"
  10604.  
  10605. LINKFILE:
  10606.  dc.l LINKSPACE
  10607.  
  10608. ******************************************
  10609.  
  10610.  
  10611. brightentab: incbin "ab3:includes/brightenfile"
  10612. WorkSpace:
  10613.  ds.l 8192 
  10614. waterfile: incbin "ab3:includes/waterfile"
  10615.  
  10616.  SECTION ffff,CODE_C
  10617.  
  10618. nullspr: dc.l 0
  10619.  
  10620.  cnop 0,8
  10621. borders:
  10622.  incbin "ab3:includes/newleftbord"
  10623.  incbin "ab3:includes/newrightbord"
  10624.  
  10625. health: incbin "ab3:includes/healthstrip"
  10626. Ammunition: incbin "ab3:includes/ammostrip"
  10627. healthpal: incbin "ab3:includes/healthpal"
  10628. PanelKeys: incbin "ab3:includes/greenkey"
  10629.  incbin "ab3:includes/redkey"
  10630.  incbin "ab3:includes/yellowkey"
  10631.  incbin "ab3:includes/bluekey"
  10632.  
  10633. null: ds.w 500
  10634. null2: ds.w 500
  10635. null3: ds.w 500
  10636. null4: ds.w 500
  10637.  
  10638.  
  10639. Blurbfield:
  10640.  
  10641.  dc.w bpl1ptl
  10642. bl1l: dc.w 0
  10643.  dc.w bpl1pth
  10644. bl1h: dc.w 0
  10645.  
  10646.  dc.w diwstart,$2c81
  10647.  dc.w diwstop,$1cc1
  10648.  dc.w ddfstart,$38
  10649.  dc.w ddfstop,$b8
  10650.  dc.w bplcon0,$9201
  10651.  dc.w bplcon1,0
  10652.  dc.w $106,$c40
  10653. blcols:
  10654.  dc.w col0,0
  10655.  dc.w col1,$fff
  10656.  
  10657.  dc.w $108,0
  10658.  dc.w $10a,0
  10659.  
  10660.  dc.w $ffff,$fffe
  10661.  dc.w $ffff,$fffe
  10662.  
  10663. nullline:
  10664.  ds.b 80    
  10665.  
  10666.  include "ab3:source_4000/titlecop.s"
  10667.  
  10668. bigfield:    
  10669.                 ; Start of our copper list.
  10670.  
  10671.  dc.w dmacon,$8020
  10672.  dc.w intreq,$8011
  10673.  dc.w $1fc,$f
  10674.  dc.w diwstart
  10675. winstart: dc.w $2c81
  10676.  dc.w diwstop
  10677. winstop: dc.w $2cc1
  10678.  dc.w ddfstart
  10679. fetchstart: dc.w $38
  10680.  dc.w ddfstop
  10681. fetchstop: dc.w $b8
  10682.  
  10683. bordercols:
  10684.  incbin "ab3:includes/borderpal"
  10685.  
  10686.  dc.w spr0ptl
  10687. s0l:
  10688.  dc.w 0
  10689.  dc.w spr0pth
  10690. s0h:
  10691.  dc.w 0
  10692.  dc.w spr1ptl
  10693. s1l:
  10694.  dc.w 0
  10695.  dc.w spr1pth
  10696. s1h:
  10697.  dc.w 0
  10698.  dc.w spr2ptl
  10699. s2l:
  10700.  dc.w 0
  10701.  dc.w spr2pth
  10702. s2h:
  10703.  dc.w 0
  10704.  dc.w spr3ptl
  10705. s3l:
  10706.  dc.w 0
  10707.  dc.w spr3pth
  10708. s3h:
  10709.  dc.w 0
  10710.  dc.w spr4ptl
  10711. s4l:
  10712.  dc.w 0
  10713.  dc.w spr4pth
  10714. s4h:
  10715.  dc.w 0
  10716.  dc.w spr5ptl
  10717. s5l:
  10718.  dc.w 0
  10719.  dc.w spr5pth
  10720. s5h:
  10721.  dc.w 0
  10722.  dc.w spr6ptl
  10723. s6l:
  10724.  dc.w 0
  10725.  dc.w spr6pth
  10726. s6h:
  10727.  dc.w 0
  10728.  dc.w spr7ptl
  10729. s7l:
  10730.  dc.w 0
  10731.  dc.w spr7pth
  10732. s7h:
  10733.  dc.w 0
  10734.  
  10735.  
  10736. ; dc.w $106,$c42
  10737. ; incbin "borderpal"
  10738.  
  10739.  dc.w $106,$c42
  10740.  
  10741.  dc.w bplcon0,$0211
  10742.  dc.w bplcon1
  10743. smoff:
  10744.  dc.w $0
  10745.  
  10746.  dc.w $108
  10747. modulo: dc.w 0
  10748.  dc.w $10a,0
  10749.  
  10750.  dc.w $1001,$ff00
  10751.  dc.w intreq,$11
  10752.  
  10753.  dc.w $2001,$ff00
  10754.  
  10755.  dc.w bpl1pth
  10756. pl1h
  10757.  dc.w 0
  10758.  
  10759.  dc.w bpl1ptl
  10760. pl1l
  10761.  dc.w 0
  10762.  
  10763.  dc.w bpl2pth
  10764. pl2h
  10765.  dc.w 0
  10766.  
  10767.  dc.w bpl2ptl
  10768. pl2l
  10769.  dc.w 0
  10770.  
  10771.  dc.w bpl3pth
  10772. pl3h
  10773.  dc.w 0
  10774.  
  10775.  dc.w bpl3ptl
  10776. pl3l
  10777.  dc.w 0
  10778.  
  10779.  dc.w bpl4pth
  10780. pl4h
  10781.  dc.w 0
  10782.  
  10783.  dc.w bpl4ptl
  10784. pl4l
  10785.  dc.w 0
  10786.  
  10787.  dc.w bpl5pth
  10788. pl5h
  10789.  dc.w 0
  10790.  
  10791.  dc.w bpl5ptl
  10792. pl5l
  10793.  dc.w 0
  10794.  
  10795.  dc.w bpl6pth
  10796. pl6h
  10797.  dc.w 0
  10798.  
  10799.  dc.w bpl6ptl
  10800. pl6l
  10801.  dc.w 0
  10802.  
  10803.  dc.w bpl7pth
  10804. pl7h
  10805.  dc.w 0
  10806.  
  10807.  dc.w bpl7ptl
  10808. pl7l
  10809.  dc.w 0
  10810.  
  10811.  dc.w bpl8pth
  10812. pl8h
  10813.  dc.w 0
  10814.  
  10815.  dc.w bpl8ptl
  10816. pl8l
  10817.  dc.w 0
  10818.  
  10819. ; dc.w $80
  10820. ;JUMPBACKH:
  10821. ; dc.w 0
  10822. ; dc.w $82
  10823. ;JUMPBACKL:
  10824. ; dc.w 0
  10825.  
  10826.  dc.w $8a,0
  10827.  
  10828.  dc.w $ffff,$fffe
  10829.  dc.w $ffff,$fffe
  10830.  
  10831. COPIEDPAL:
  10832.  dc.w 256,0
  10833.  ds.l 3*256
  10834.  ds.l 10
  10835.  
  10836. PALETTEBIT:
  10837. ; incbin "256palette"
  10838. ; dc.w $ffff,$fffe
  10839.  
  10840.  
  10841.  
  10842.  incbin "ab3:includes/256pal"
  10843.  
  10844. yposcop:
  10845. ; dc.w $2a11,$fffe
  10846. ; dc.w $8a,0
  10847.  
  10848. ; ds.l 104*12
  10849.  
  10850. ;colbars:
  10851. ;val SET $2a
  10852. ; dcb.l 104*80,$1fe0000
  10853. ; dc.w $106,$c42
  10854. ; dc.w $80
  10855. ;pch1:
  10856. ; dc.w 0
  10857. ; dc.w $82
  10858. ;pcl1:
  10859. ; dc.w 0 
  10860. ; dc.w $88,0
  10861. ; dc.w $ffff,$fffe       ; End copper list.
  10862.  
  10863. ; ds.l 104*12
  10864.  
  10865.  
  10866. ;colbars2:
  10867. ;val SET $2a
  10868. ; dcb.l 104*80,$1fe0000
  10869. ; dc.w $106,$c42
  10870. ; dc.w $80
  10871. ;pch2:
  10872. ; dc.w 0
  10873. ; dc.w $82
  10874. ;pcl2:
  10875. ; dc.w 0
  10876. ; dc.w $88,0
  10877. ; dc.w $ffff,$fffe       ; End copper list.
  10878.  
  10879. ; ds.l 104*10
  10880.  
  10881. NullCopper:
  10882.  dc.w $ffff,$fffe
  10883.  
  10884. hitcol: dc.l 0
  10885.  
  10886. old: dc.l 0
  10887.  
  10888. prot5: dc.w 0
  10889. PanelCop:
  10890.  
  10891.  dc.w $80
  10892. och:
  10893.  dc.w 0
  10894.  dc.w $82
  10895. ocl:
  10896.  dc.w 0
  10897.  
  10898. statskip:
  10899.  dc.w $1fe,0
  10900.  dc.w $1fe,0
  10901.  
  10902.  dc.w $10c,0
  10903.  dc.w bplcon0,$1201
  10904.  dc.w bpl1ptl
  10905. n1l:
  10906.  dc.w 0
  10907.  dc.w bpl1pth
  10908. n1h:
  10909.  dc.w 0
  10910.  dc.w $108,-24
  10911.  incbin "ab3:includes/Panelpal"
  10912.  
  10913.  dc.w bpl2pth
  10914. p2h
  10915.  dc.w 0
  10916.  
  10917.  dc.w bpl2ptl
  10918. p2l
  10919.  dc.w 0
  10920.  
  10921.  dc.w bpl3pth
  10922. p3h
  10923.  dc.w 0
  10924.  
  10925.  dc.w bpl3ptl
  10926. p3l
  10927.  dc.w 0
  10928.  
  10929.  dc.w bpl4pth
  10930. p4h
  10931.  dc.w 0
  10932.  dc.w bpl4ptl
  10933. p4l
  10934.  dc.w 0
  10935.  dc.w bpl5pth
  10936. p5h
  10937.  dc.w 0
  10938.  dc.w bpl5ptl
  10939. p5l
  10940.  dc.w 0
  10941.  dc.w bpl6pth
  10942. p6h
  10943.  dc.w 0
  10944.  dc.w bpl6ptl
  10945. p6l
  10946.  dc.w 0
  10947.  dc.w bpl7pth
  10948. p7h
  10949.  dc.w 0
  10950.  dc.w bpl7ptl
  10951. p7l
  10952.  dc.w 0
  10953.  dc.w bpl8pth
  10954. p8h
  10955.  dc.w 0
  10956.  dc.w bpl8ptl
  10957. p8l
  10958.  dc.w 0
  10959.  
  10960.  
  10961.  dc.w ddfstart,$38
  10962.  dc.w ddfstop,$b8
  10963.  dc.w diwstart,$2c81
  10964.  dc.w diwstop,$2cc1
  10965.  
  10966.  dc.w bplcon0
  10967. Panelcon: dc.w $0211
  10968.  dc.w bpl1pth
  10969. p1h
  10970.  dc.w 0
  10971.  
  10972.  dc.w bpl1ptl
  10973. p1l
  10974.  dc.w 0
  10975.  
  10976.  
  10977.  dc.w $108,40*7
  10978.  dc.w $10a,40*7
  10979.  
  10980.  dc.w $ffff,$fffe
  10981.  
  10982.  dc.w $180,$fff
  10983.  
  10984.  
  10985.  dc.w $f801,$ff00
  10986.  dc.w col1,$50
  10987.  dc.w $f901,$ff00
  10988.  dc.w col1,$90
  10989.  dc.w $fa01,$ff00
  10990.  dc.w col1,$f0
  10991.  dc.w $fb01,$ff00
  10992.  dc.w col1,$f0
  10993.  dc.w $fc01,$ff00
  10994.  dc.w col1,$90
  10995.  dc.w $fd01,$ff00
  10996.  dc.w col1,$50
  10997.  
  10998.  dc.w $fe01,$ff00
  10999.  dc.w col1,$fff
  11000.  
  11001.  dc.w $ffdf,$fffe
  11002.  dc.w $a01,$ff00
  11003.  dc.w bplcon0,$201
  11004.  
  11005.  incbin "ab3:includes/faces2cols"
  11006.  dc.w bpl1pth
  11007. f1h
  11008.  dc.w 0
  11009.  
  11010.  dc.w bpl1ptl
  11011. f1l
  11012.  dc.w 0
  11013.  
  11014.  dc.w bpl2pth
  11015. f2h
  11016.  dc.w 0
  11017.  
  11018.  dc.w bpl2ptl
  11019. f2l
  11020.  dc.w 0
  11021.  
  11022.  dc.w bpl3pth
  11023. f3h
  11024.  dc.w 0
  11025.  
  11026.  dc.w bpl3ptl
  11027. f3l
  11028.  dc.w 0
  11029.  
  11030.  dc.w bpl4pth
  11031. f4h
  11032.  dc.w 0
  11033.  dc.w bpl4ptl
  11034. f4l
  11035.  dc.w 0
  11036.  
  11037.  dc.w bpl5pth
  11038. f5h
  11039.  dc.w 0
  11040.  dc.w bpl5ptl
  11041. f5l
  11042.  dc.w 0
  11043.  
  11044.  dc.w $0c01,$ff00
  11045.  dc.w bplcon0,$5201
  11046.   
  11047.  dc.w $ffff,$fffe
  11048.  
  11049.  cnop 0,64
  11050. FacePlace:
  11051. ; ds.l 6*32*5
  11052.  
  11053. TEXTSCRN: dc.l 0
  11054.  
  11055. TEXTCOP:
  11056.  dc.w intreq,$8030
  11057.  
  11058.  dc.w spr0ptl
  11059. txs0l:
  11060.  dc.w 0
  11061.  dc.w spr0pth
  11062. txs0h:
  11063.  dc.w 0
  11064.  dc.w spr1ptl
  11065. txs1l:
  11066.  dc.w 0
  11067.  dc.w spr1pth
  11068. txs1h:
  11069.  dc.w 0
  11070.  dc.w spr2ptl
  11071. txs2l:
  11072.  dc.w 0
  11073.  dc.w spr2pth
  11074. txs2h:
  11075.  dc.w 0
  11076.  dc.w spr3ptl
  11077. txs3l:
  11078.  dc.w 0
  11079.  dc.w spr3pth
  11080. txs3h:
  11081.  dc.w 0
  11082.  dc.w spr4ptl
  11083. txs4l:
  11084.  dc.w 0
  11085.  dc.w spr4pth
  11086. txs4h:
  11087.  dc.w 0
  11088.  dc.w spr5ptl
  11089. txs5l:
  11090.  dc.w 0
  11091.  dc.w spr5pth
  11092. txs5h:
  11093.  dc.w 0
  11094.  dc.w spr6ptl
  11095. txs6l:
  11096.  dc.w 0
  11097.  dc.w spr6pth
  11098. txs6h:
  11099.  dc.w 0
  11100.  dc.w spr7ptl
  11101. txs7l:
  11102.  dc.w 0
  11103.  dc.w spr7pth
  11104. txs7h:
  11105.  dc.w 0
  11106.  
  11107.  
  11108.  dc.w $10c,$0088
  11109.  
  11110.  dc.w $1fc,$f
  11111.  dc.w diwstart,$2c81    ; Top left corner of screen.
  11112.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  11113.  dc.w ddfstart,$38      ; Data fetch start.
  11114.  dc.w ddfstop,$c8       ; Data fetch stop.
  11115.  
  11116.  dc.w bplcon0
  11117. TSCP:
  11118.  dc.w $9201
  11119.  
  11120.  dc.w $106,$c40
  11121.  
  11122.  dc.w $2a01,$ff00
  11123.  
  11124.  dc.w col0,0
  11125.  dc.w col1
  11126. TOPLET:
  11127. TXTCOLL:
  11128.  dc.w 0
  11129.   dc.w col2
  11130. BOTLET:
  11131.  dc.w 0
  11132.  dc.w col3
  11133. ALLTEXT:
  11134.  dc.w $fff
  11135.  dc.w $106,$e40
  11136.  dc.w col3
  11137. ALLTEXTLOW:
  11138.  dc.w $0
  11139.  
  11140.  
  11141.  dc.w bpl1pth
  11142. TSPTh:
  11143.  dc.w 0
  11144.  dc.w bpl1ptl
  11145. TSPTl:
  11146.  dc.w 0
  11147.  
  11148.  dc.w bpl2pth
  11149. TSPTh2:
  11150.  dc.w 0
  11151.  dc.w bpl2ptl
  11152. TSPTl2:
  11153.  dc.w 0
  11154.  
  11155.  
  11156.  dc.w $108,0
  11157.  dc.w $10a,0
  11158.  
  11159.  dc.w $ffff,$fffe
  11160.  
  11161. ********************************************
  11162. * Stuff you don't have to worry about yet. *
  11163. ********************************************
  11164.  
  11165. closeeverything:
  11166.  
  11167.  jsr mt_end
  11168.  
  11169.  move.l #nullcop,d0
  11170. ; move.l old,d0
  11171.  
  11172.  
  11173. ;charlie  
  11174.  move.l d0,$dff080     ; Restore old copper list.
  11175.  move.w d0,ocl
  11176.  swap d0
  11177.  move.w d0,och
  11178.  
  11179. ; move.l doslib,a6
  11180. ; move.l #4,d1
  11181. ; jsr -198(a6)
  11182.  
  11183. ; move.l doslib,d0
  11184. ; move.l d0,a1
  11185. ; move.l 4.w,a6
  11186. ; jsr CloseLib(a6)
  11187.  
  11188.  move.l #$dff000,a6
  11189.  move.w #$8020,dmacon(a6)
  11190.  move.w #$f,dmacon(a6)
  11191.  
  11192. ; move.l 4.w,a6
  11193. ; lea VBLANKInt,a1
  11194. ; moveq #INTB_COPER,d0
  11195. ; jsr _LVORemIntServer(a6)
  11196.  
  11197. ; IFEQ CD32VER
  11198. ; move.l OLDKINT,$68.w
  11199. ; ENDC
  11200. ; move.w saveinters,d0
  11201. ; or.w #$c000,d0
  11202. ; move.w d0,intena(a6)
  11203.  clr.w $dff0a8
  11204.  clr.w $dff0b8
  11205.  clr.w $dff0c8
  11206.  clr.w $dff0d8
  11207.  
  11208.  
  11209. ; move.l oldview,a1
  11210. ; move.l a1,d0
  11211. ; move.l gfxbase,a6
  11212. ; jsr -$de(a6)
  11213.  
  11214. ; cmp.b #'s',mors
  11215. ; beq.s leaveold
  11216. ; move.w #$f8e,$dff1dc
  11217. ;leaveold:
  11218.  
  11219.  jsr RELEASELEVELMEM
  11220.  jsr RELEASESCRNMEM
  11221.  
  11222.  move.l #0,d0
  11223.  
  11224.  rts
  11225.  
  11226.  
  11227.  
  11228. intbase: dc.l 0
  11229. gfxbase: dc.l 0
  11230. oldview: dc.l 0
  11231.  
  11232. stuff:
  11233.  
  11234.     PRSDL
  11235.     Lea    gfxname(pc),a1    
  11236.     Moveq.l    #0,d0
  11237.     Move.l    $4.w,a6    
  11238.     Jsr    -$228(a6)
  11239.     add.w d1,RVAL1
  11240.     Move.l     d0,gfxbase
  11241.     Move.l    d0,a6                Use As Base Reg
  11242.     Move.l    34(a6),oldview
  11243.     move.l 38(a6),old
  11244.     rts
  11245.  
  11246. gfxname dc.b "graphics.library",0
  11247.  even
  11248. INTUNAME    dc.b    "intuition.library",0
  11249.  
  11250.  even
  11251.  
  11252.  
  11253.  cnop 0,64
  11254.  
  11255. Panel:
  11256.  dc.l 0
  11257.  
  11258. TimerScr: 
  11259. ;ds.b 40*64
  11260.  
  11261. scrntab:
  11262.  ds.b 16
  11263. val SET 32
  11264.  REPT 96
  11265.  dc.b val,val,val
  11266. val SET val+1
  11267.  ENDR
  11268.  ds.b 16
  11269.  
  11270. smallscrntab:
  11271. val SET 32
  11272.  REPT 96
  11273.  dc.b val,val
  11274. val SET val+1
  11275.  ENDR
  11276.  
  11277.  cnop 0,64
  11278. ;scrn:
  11279. ; ds.l 2560*8
  11280. ;scrn2:
  11281. ; ds.l 2560*8
  11282.  
  11283.  
  11284.  dcb.l 8,$33333333
  11285.  dc.l 0
  11286.  dc.l 0
  11287.  
  11288.  dcb.l 8,$0f0f0f0f
  11289.  dc.l 0
  11290.  dc.l 0
  11291.  
  11292.  dcb.l 8,$00ff00ff
  11293.  dc.l 0
  11294.  dc.l 0
  11295.  
  11296.  dcb.l 8,$0000ffff
  11297.  dc.l 0
  11298.  dc.l 0
  11299.  
  11300.  dc.l 0,-1,0,-1,0,-1,0,-1
  11301.  dc.l 0
  11302.  dc.l 0
  11303.  
  11304.  dc.l -1,-1,0,0,-1,-1,0,0
  11305.  dc.l 0
  11306.  dc.l 0
  11307.  
  11308.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  11309.  dc.l 0
  11310.  dc.l 0
  11311.  
  11312. NumTimes: dc.l 0
  11313. TimeCount: dc.l 0
  11314. oldtime: dc.l 0
  11315. counting: dc.b 0
  11316. oktodisplay: dc.b 0
  11317.  
  11318. INITTIMER:
  11319.  move.l #0,TimeCount
  11320.  move.l #0,NumTimes
  11321.  rts
  11322.  
  11323. STARTCOUNT:
  11324.  move.l d0,-(a7)
  11325.  move.l $dff004,d0
  11326.  and.l #$1ffff,d0
  11327.  move.l d0,oldtime
  11328.  st counting
  11329.  move.l (a7)+,d0
  11330.  rts
  11331.  
  11332. STOPCOUNT:
  11333.  move.l d0,-(a7)
  11334.  move.l $dff004,d0
  11335.  and.l #$1ffff,d0
  11336.  
  11337.  sub.l oldtime,d0
  11338.  cmp.l #-256,d0
  11339.  bge.s okcount
  11340.  add.l #313*256,d0
  11341. okcount:
  11342.  add.l d0,TimeCount
  11343.  addq.l #1,NumTimes
  11344.  clr.b counting
  11345.  move.l (a7)+,d0
  11346.  rts
  11347.  
  11348. STOPCOUNTNOADD:
  11349.  move.l d0,-(a7)
  11350.  move.l $dff004,d0
  11351.  and.l #$1ffff,d0
  11352.  
  11353.  sub.l oldtime,d0
  11354.  cmp.l #-256,d0
  11355.  bge.s okcount2
  11356.  add.l #313*256,d0
  11357. okcount2:
  11358.  add.l d0,TimeCount
  11359.  clr.b counting
  11360.  move.l (a7)+,d0
  11361.  rts
  11362.  
  11363. maxbot: dc.w 0
  11364. tstneg: dc.l 0
  11365.  
  11366. STOPTIMER:
  11367.  st oktodisplay
  11368.  rts
  11369.  
  11370. digits: incbin "ab3:includes/numbers.inc"
  11371.  
  11372. COMPACTMAP: ds.l 257
  11373.  
  11374. BIGMAP: ds.l 256*10
  11375.  
  11376.  Section Sounds,CODE_C
  11377.  
  11378. nullcop:
  11379.  dc.w $106,$c40
  11380.  dc.w $180,0 
  11381.  dc.w $100,$0
  11382.  dc.w $ffff,$fffe
  11383.  
  11384. Scream:
  11385. ; incbin "ab3:sounds/Scream"
  11386. ; ds.w 100
  11387. EndScream:
  11388. LowScream:
  11389. ; incbin "ab3:sounds/LowScream"
  11390. ; ds.w 100
  11391. EndLowScream:
  11392. BaddieGun:
  11393. ; incbin "ab3:sounds/BaddieGun"
  11394. EndBaddieGun:
  11395. bass:
  11396. ; incbin "ab3:sounds/backbass+drum"
  11397. bassend:
  11398. Shoot:
  11399. ; incbin "ab3:sounds/fire!"
  11400. EndShoot:
  11401. Munch:
  11402. ; incbin "ab3:sounds/munch"
  11403. EndMunch:
  11404. PooGun:
  11405. ; incbin "ab3:sounds/shoot.dm"
  11406. EndPooGun:
  11407. Collect:
  11408. ; incbin "ab3:sounds/collect"
  11409. EndCollect:
  11410. DoorNoise:
  11411. ; incbin "ab3:sounds/newdoor"
  11412. EndDoorNoise:
  11413. Stomp:
  11414. ; incbin "ab3:sounds/footstep3"
  11415. EndStomp:
  11416. SwitchNoise:
  11417. ; incbin "ab3:sounds/switch"
  11418. EndSwitch:
  11419. Reload:
  11420. ; incbin "ab3:sounds/switch1.SFX"
  11421. EndReload:
  11422.  
  11423. CHEATFRAME:
  11424.  dc.b 26,20,33,27,17,12
  11425. ENDCHEAT:
  11426.  
  11427. NoAmmo:
  11428. ; incbin "ab3:sounds/noammo"
  11429. EndNoAmmo:
  11430. Splotch:
  11431. ; incbin "ab3:sounds/splotch"
  11432. EndSplotch:
  11433. SplatPop:
  11434. ; incbin "ab3:sounds/splatpop"
  11435. EndSplatPop:
  11436. Boom:
  11437. ; incbin "ab3:sounds/boom"
  11438. EndBoom:
  11439. Hiss:
  11440. ; incbin "ab3:sounds/newhiss"
  11441. EndHiss:
  11442. Howl1:
  11443. ; incbin "ab3:sounds/howl1"
  11444. EndHowl1:
  11445. Howl2:
  11446. ; incbin "ab3:sounds/howl2"
  11447. EndHowl2:
  11448. Pant:
  11449. ; incbin "ab3:sounds/pant"
  11450. EndPant:
  11451. Whoosh:
  11452. ; incbin "ab3:sounds/whoosh"
  11453. EndWhoosh:
  11454. ROAR:
  11455. ; incbin "ab3:sounds/bigscream"
  11456. EndROAR
  11457. whoosh:
  11458. ; incbin "ab3:sounds/flame"
  11459. Endwhoosh:
  11460.  SECTION music,code_c
  11461.  
  11462. UseAllChannels: dc.w 0
  11463.  
  11464. mt_init:move.l    mt_data,a0
  11465.     move.l    a0,a1
  11466.     add.l    #$3b8,a1
  11467.     moveq    #$7f,d0
  11468.     moveq    #0,d1
  11469. mt_loop:move.l    d1,d2
  11470.     subq.w    #1,d0
  11471. mt_lop2:move.b    (a1)+,d1
  11472.     cmp.b    d2,d1
  11473.     bgt.s    mt_loop
  11474.     dbf    d0,mt_lop2
  11475.     addq.b    #1,d2
  11476.  
  11477.     lea    mt_samplestarts(pc),a1
  11478.     asl.l    #8,d2
  11479.     asl.l    #2,d2
  11480.     add.l    #$43c,d2
  11481.     add.l    a0,d2
  11482.     move.l    d2,a2
  11483.     moveq    #$1e,d0
  11484. mt_lop3:clr.l    (a2)
  11485.     move.l    a2,(a1)+
  11486.     moveq    #0,d1
  11487.     move.w    42(a0),d1
  11488.     asl.l    #1,d1
  11489.     add.l    d1,a2
  11490.     add.l    #$1e,a0
  11491.     dbf    d0,mt_lop3
  11492.  
  11493.     or.b    #$2,$bfe001
  11494.     move.b    #$6,mt_speed
  11495.     clr.w    $dff0a8
  11496.     clr.w    $dff0b8
  11497.     clr.w    $dff0c8
  11498.     clr.w    $dff0d8
  11499.     clr.b    mt_songpos
  11500.     clr.b    mt_counter
  11501.     clr.w    mt_pattpos
  11502.     rts
  11503.  
  11504. mt_end:    clr.w    $dff0a8
  11505.     clr.w    $dff0b8
  11506.     clr.w    $dff0c8
  11507.     clr.w    $dff0d8
  11508.     move.w    #$f,$dff096
  11509.     rts
  11510.  
  11511. mt_music:
  11512.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  11513.     move.l    mt_data,a0
  11514.     addq.b    #$1,mt_counter
  11515.     move.b    mt_counter,D0
  11516.     cmp.b    mt_speed,D0
  11517.     blt.s    mt_nonew
  11518.     clr.b    mt_counter
  11519.     bra    mt_getnew
  11520.  
  11521. mt_nonew:
  11522.     lea    mt_voice1(pc),a6
  11523.     lea    $dff0a0,a5
  11524.     bsr    mt_checkcom
  11525.     lea    mt_voice2(pc),a6
  11526.     lea    $dff0b0,a5
  11527.     bsr    mt_checkcom
  11528.     tst.b UseAllChannels
  11529.     beq mt_endr
  11530.      lea    mt_voice3(pc),a6
  11531.     lea    $dff0c0,a5
  11532.     bsr    mt_checkcom
  11533.     lea    mt_voice4(pc),a6
  11534.     lea    $dff0d0,a5
  11535.     bsr    mt_checkcom
  11536.     bra    mt_endr
  11537.  
  11538. mt_arpeggio:
  11539.     moveq    #0,d0
  11540.     move.b    mt_counter,d0
  11541.     divs    #$3,d0
  11542.     swap    d0
  11543.     cmp.w    #$0,d0
  11544.     beq.s    mt_arp2
  11545.     cmp.w    #$2,d0
  11546.     beq.s    mt_arp1
  11547.  
  11548.     moveq    #0,d0
  11549.     move.b    $3(a6),d0
  11550.     lsr.b    #4,d0
  11551.     bra.s    mt_arp3
  11552. mt_arp1:moveq    #0,d0
  11553.     move.b    $3(a6),d0
  11554.     and.b    #$f,d0
  11555.     bra.s    mt_arp3
  11556. mt_arp2:move.w    $10(a6),d2
  11557.     bra.s    mt_arp4
  11558. mt_arp3:asl.w    #1,d0
  11559.     moveq    #0,d1
  11560.     move.w    $10(a6),d1
  11561.     lea    mt_periods(pc),a0
  11562.     moveq    #$24,d7
  11563. mt_arploop:
  11564.     move.w    (a0,d0.w),d2
  11565.     cmp.w    (a0),d1
  11566.     bge.s    mt_arp4
  11567.     addq.l    #2,a0
  11568.     dbf    d7,mt_arploop
  11569.     rts
  11570. mt_arp4:move.w    d2,$6(a5)
  11571.     rts
  11572.  
  11573. mt_getnew:
  11574.     move.l    mt_data,a0
  11575.     move.l    a0,a3
  11576.     move.l    a0,a2
  11577.     add.l    #$c,a3
  11578.     add.l    #$3b8,a2
  11579.     add.l    #$43c,a0
  11580.  
  11581.     moveq    #0,d0
  11582.     move.l    d0,d1
  11583.     move.b    mt_songpos,d0
  11584.     move.b    (a2,d0.w),d1
  11585.     asl.l    #8,d1
  11586.     asl.l    #2,d1
  11587.     add.w    mt_pattpos,d1
  11588.     clr.w    mt_dmacon
  11589.  
  11590.     lea    $dff0a0,a5
  11591.     lea    mt_voice1(pc),a6
  11592.     bsr    mt_playvoice
  11593.     lea    $dff0b0,a5
  11594.     lea    mt_voice2(pc),a6
  11595.     bsr    mt_playvoice
  11596.     tst.b UseAllChannels
  11597.     beq mt_setdma
  11598.     lea    $dff0c0,a5
  11599.     lea    mt_voice3(pc),a6
  11600.     bsr    mt_playvoice
  11601.     lea    $dff0d0,a5
  11602.     lea    mt_voice4(pc),a6
  11603.     bsr    mt_playvoice
  11604.     bra    mt_setdma
  11605.  
  11606. PROTCALC:
  11607. ;    include "ab3:source_4000/protcalc.s"
  11608.     incbin "ab3:includes/protcalc.bin"
  11609. ENDPROTCALC:
  11610.  
  11611. mt_playvoice:
  11612.     move.l    (a0,d1.l),(a6)
  11613.     addq.l    #4,d1
  11614.     moveq    #0,d2
  11615.     move.b    $2(a6),d2
  11616.     and.b    #$f0,d2
  11617.     lsr.b    #4,d2
  11618.     move.b    (a6),d0
  11619.     and.b    #$f0,d0
  11620.     or.b    d0,d2
  11621.     tst.b    d2
  11622.     beq.s    mt_setregs
  11623.     moveq    #0,d3
  11624.     lea    mt_samplestarts(pc),a1
  11625.     move.l    d2,d4
  11626.     subq.l    #$1,d2
  11627.     asl.l    #2,d2
  11628.     mulu    #$1e,d4
  11629.     move.l    (a1,d2.l),$4(a6)
  11630.     move.w    (a3,d4.l),$8(a6)
  11631.     move.w    $2(a3,d4.l),$12(a6)
  11632.     move.w    $4(a3,d4.l),d3
  11633.     tst.w    d3
  11634.     beq.s    mt_noloop
  11635.     move.l    $4(a6),d2
  11636.     asl.w    #1,d3
  11637.     add.l    d3,d2
  11638.     move.l    d2,$a(a6)
  11639.     move.w    $4(a3,d4.l),d0
  11640.     add.w    $6(a3,d4.l),d0
  11641.     move.w    d0,8(a6)
  11642.     move.w    $6(a3,d4.l),$e(a6)
  11643.     move.w    $12(a6),d0
  11644.     asr.w #2,d0
  11645.     move.w d0,$8(a5)
  11646.     bra.s    mt_setregs
  11647. mt_noloop:
  11648.     move.l    $4(a6),d2
  11649.     add.l    d3,d2
  11650.     move.l    d2,$a(a6)
  11651.     move.w    $6(a3,d4.l),$e(a6)
  11652.     move.w    $12(a6),d0
  11653.     asr.w #2,d0
  11654.     move.w d0,$8(a5)
  11655. mt_setregs:
  11656.     move.w    (a6),d0
  11657.     and.w    #$fff,d0
  11658.     beq    mt_checkcom2
  11659.     move.b    $2(a6),d0
  11660.     and.b    #$F,d0
  11661.     cmp.b    #$3,d0
  11662.     bne.s    mt_setperiod
  11663.     bsr    mt_setmyport
  11664.     bra    mt_checkcom2
  11665. mt_setperiod:
  11666.     move.w    (a6),$10(a6)
  11667.     and.w    #$fff,$10(a6)
  11668.     move.w    $14(a6),d0
  11669.     move.w    d0,$dff096
  11670.     clr.b    $1b(a6)
  11671.  
  11672.     move.l    $4(a6),(a5)
  11673.     move.w    $8(a6),$4(a5)
  11674.     move.w    $10(a6),d0
  11675.     and.w    #$fff,d0
  11676.     move.w    d0,$6(a5)
  11677.     move.w    $14(a6),d0
  11678.     or.w    d0,mt_dmacon
  11679.     bra    mt_checkcom2
  11680.  
  11681. mt_setdma:
  11682.      move.w #250,d0
  11683. mt_wait:
  11684.      add.w #1,testchip
  11685.      dbra d0,mt_wait
  11686.     move.w    mt_dmacon,d0
  11687.     or.w    #$8000,d0
  11688.     and.w #%1111111111110011,d0
  11689.     move.w    d0,$dff096
  11690.     move.w #250,d0
  11691. mt_wait2:
  11692.     add.w #1,testchip
  11693.     dbra    d0,mt_wait2
  11694.     lea    $dff000,a5
  11695.     tst.b UseAllChannels
  11696.     beq.s noall
  11697.     lea    mt_voice4(pc),a6
  11698.     move.l    $a(a6),$d0(a5)
  11699.     move.w    $e(a6),$d4(a5)
  11700.     lea    mt_voice3(pc),a6
  11701.     move.l    $a(a6),$c0(a5)
  11702.     move.w    $e(a6),$c4(a5)
  11703. noall:
  11704.     lea    mt_voice2(pc),a6
  11705.     move.l    $a(a6),$b0(a5)
  11706.     move.w    $e(a6),$b4(a5)
  11707.     lea    mt_voice1(pc),a6
  11708.     move.l    $a(a6),$a0(a5)
  11709.     move.w    $e(a6),$a4(a5)
  11710.  
  11711.     add.w    #$10,mt_pattpos
  11712.     cmp.w    #$400,mt_pattpos
  11713.     bne.s    mt_endr
  11714. mt_nex:    clr.w    mt_pattpos
  11715.     clr.b    mt_break
  11716.     addq.b    #1,mt_songpos
  11717.     and.b    #$7f,mt_songpos
  11718.     move.b    mt_songpos,d1
  11719. ;    cmp.b    mt_data+$3b6,d1
  11720. ;    bne.s    mt_endr
  11721. ;    move.b    mt_data+$3b7,mt_songpos
  11722. mt_endr:tst.b    mt_break
  11723.     bne.s    mt_nex
  11724.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  11725.     rts
  11726.  
  11727. mt_setmyport:
  11728.     move.w    (a6),d2
  11729.     and.w    #$fff,d2
  11730.     move.w    d2,$18(a6)
  11731.     move.w    $10(a6),d0
  11732.     clr.b    $16(a6)
  11733.     cmp.w    d0,d2
  11734.     beq.s    mt_clrport
  11735.     bge.s    mt_rt
  11736.     move.b    #$1,$16(a6)
  11737.     rts
  11738. mt_clrport:
  11739.     clr.w    $18(a6)
  11740. mt_rt:    rts
  11741.  
  11742. CODESTORE: dc.l 0
  11743.  
  11744. mt_myport:
  11745.     move.b    $3(a6),d0
  11746.     beq.s    mt_myslide
  11747.     move.b    d0,$17(a6)
  11748.     clr.b    $3(a6)
  11749. mt_myslide:
  11750.     tst.w    $18(a6)
  11751.     beq.s    mt_rt
  11752.     moveq    #0,d0
  11753.     move.b    $17(a6),d0
  11754.     tst.b    $16(a6)
  11755.     bne.s    mt_mysub
  11756.     add.w    d0,$10(a6)
  11757.     move.w    $18(a6),d0
  11758.     cmp.w    $10(a6),d0
  11759.     bgt.s    mt_myok
  11760.     move.w    $18(a6),$10(a6)
  11761.     clr.w    $18(a6)
  11762. mt_myok:move.w    $10(a6),$6(a5)
  11763.     rts
  11764. mt_mysub:
  11765.     sub.w    d0,$10(a6)
  11766.     move.w    $18(a6),d0
  11767.     cmp.w    $10(a6),d0
  11768.     blt.s    mt_myok
  11769.     move.w    $18(a6),$10(a6)
  11770.     clr.w    $18(a6)
  11771.     move.w    $10(a6),$6(a5)
  11772.     rts
  11773.  
  11774. mt_vib:    move.b    $3(a6),d0
  11775.     beq.s    mt_vi
  11776.     move.b    d0,$1a(a6)
  11777.  
  11778. mt_vi:    move.b    $1b(a6),d0
  11779.     lea    mt_sin(pc),a4
  11780.     lsr.w    #$2,d0
  11781.     and.w    #$1f,d0
  11782.     moveq    #0,d2
  11783.     move.b    (a4,d0.w),d2
  11784.     move.b    $1a(a6),d0
  11785.     and.w    #$f,d0
  11786.     mulu    d0,d2
  11787.     lsr.w    #$6,d2
  11788.     move.w    $10(a6),d0
  11789.     tst.b    $1b(a6)
  11790.     bmi.s    mt_vibmin
  11791.     add.w    d2,d0
  11792.     bra.s    mt_vib2
  11793. mt_vibmin:
  11794.     sub.w    d2,d0
  11795. mt_vib2:move.w    d0,$6(a5)
  11796.     move.b    $1a(a6),d0
  11797.     lsr.w    #$2,d0
  11798.     and.w    #$3c,d0
  11799.     add.b    d0,$1b(a6)
  11800.     rts
  11801.  
  11802. mt_nop:    move.w    $10(a6),$6(a5)
  11803.     rts
  11804.  
  11805.  
  11806. mt_checkcom:
  11807.     move.w    $2(a6),d0
  11808.     and.w    #$fff,d0
  11809.     beq.s    mt_nop
  11810.     move.b    $2(a6),d0
  11811.     and.b    #$f,d0
  11812.     tst.b    d0
  11813.     beq    mt_arpeggio
  11814.     cmp.b    #$1,d0
  11815.     beq.s    mt_portup
  11816.     cmp.b    #$2,d0
  11817.     beq    mt_portdown
  11818.     cmp.b    #$3,d0
  11819.     beq    mt_myport
  11820.     cmp.b    #$4,d0
  11821.     beq    mt_vib
  11822.     move.w    $10(a6),$6(a5)
  11823.     cmp.b    #$a,d0
  11824.     beq.s    mt_volslide
  11825.     rts
  11826.  
  11827. mt_volslide:
  11828.     moveq    #0,d0
  11829.     move.b    $3(a6),d0
  11830.     lsr.b    #4,d0
  11831.     tst.b    d0
  11832.     beq.s    mt_voldown
  11833.     add.w    d0,$12(a6)
  11834.     cmp.w    #$40,$12(a6)
  11835.     bmi.s    mt_vol2
  11836.     move.w    #$40,$12(a6)
  11837. mt_vol2:move.w    $12(a6),d0
  11838.     asr.w #2,d0
  11839.     move.w d0,$8(a5)
  11840.     rts
  11841.  
  11842. mt_voldown:
  11843.     moveq    #0,d0
  11844.     move.b    $3(a6),d0
  11845.     and.b    #$f,d0
  11846.     sub.w    d0,$12(a6)
  11847.     bpl.s    mt_vol3
  11848.     clr.w    $12(a6)
  11849. mt_vol3:move.w    $12(a6),d0
  11850.     asr.w #2,d0
  11851.     move.w d0,$8(a5)
  11852.     rts
  11853.  
  11854. mt_portup:
  11855.     moveq    #0,d0
  11856.     move.b    $3(a6),d0
  11857.     sub.w    d0,$10(a6)
  11858.     move.w    $10(a6),d0
  11859.     and.w    #$fff,d0
  11860.     cmp.w    #$71,d0
  11861.     bpl.s    mt_por2
  11862.     and.w    #$f000,$10(a6)
  11863.     or.w    #$71,$10(a6)
  11864. mt_por2:move.w    $10(a6),d0
  11865.     and.w    #$fff,d0
  11866.     move.w    d0,$6(a5)
  11867.     rts
  11868.  
  11869. mt_portdown:
  11870.     clr.w    d0
  11871.     move.b    $3(a6),d0
  11872.     add.w    d0,$10(a6)
  11873.     move.w    $10(a6),d0
  11874.     and.w    #$fff,d0
  11875.     cmp.w    #$358,d0
  11876.     bmi.s    mt_por3
  11877.     and.w    #$f000,$10(a6)
  11878.     or.w    #$358,$10(a6)
  11879. mt_por3:move.w    $10(a6),d0
  11880.     and.w    #$fff,d0
  11881.     move.w    d0,$6(a5)
  11882.     rts
  11883.  
  11884. mt_checkcom2:
  11885.     move.b    $2(a6),d0
  11886.     and.b    #$f,d0
  11887.     cmp.b    #$e,d0
  11888.     beq.s    mt_setfilt
  11889.     cmp.b    #$d,d0
  11890.     beq.s    mt_pattbreak
  11891.     cmp.b    #$b,d0
  11892.     beq.s    mt_posjmp
  11893.     cmp.b    #$c,d0
  11894.     beq.s    mt_setvol
  11895.     cmp.b    #$f,d0
  11896.     beq.s    mt_setspeed
  11897.     rts
  11898.  
  11899. mt_setfilt:
  11900.     move.b    $3(a6),d0
  11901.     and.b    #$1,d0
  11902.     asl.b    #$1,d0
  11903.     and.b    #$fd,$bfe001
  11904.     or.b    d0,$bfe001
  11905.     rts
  11906. mt_pattbreak:
  11907.     not.b    mt_break
  11908.     rts
  11909. mt_posjmp:
  11910.     st reachedend
  11911.     move.b    $3(a6),d0
  11912.     subq.b    #$1,d0
  11913.     move.b    d0,mt_songpos
  11914.     not.b    mt_break
  11915.     rts
  11916. mt_setvol:
  11917.     cmp.b    #$40,$3(a6)
  11918.     ble.s    mt_vol4
  11919.     move.b    #$40,$3(a6)
  11920. mt_vol4:move.b    $3(a6),d0
  11921.     asr.w #2,d0
  11922.     move.w d0,$8(a5)
  11923.     rts
  11924. mt_setspeed:
  11925.     cmp.b    #$1f,$3(a6)
  11926.     ble.s    mt_sets
  11927.     move.b    #$1f,$3(a6)
  11928. mt_sets:move.b    $3(a6),d0
  11929.     beq.s    mt_rts2
  11930.     move.b    d0,mt_speed
  11931.     clr.b    mt_counter
  11932. mt_rts2:rts
  11933.  
  11934. mt_sin:
  11935.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  11936.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  11937.  
  11938. mt_periods:
  11939.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  11940.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  11941.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  11942.  DC.w $007f,$0078,$0071,$0000,$0000
  11943.  
  11944. reachedend: dc.b 0
  11945. mt_speed:    DC.b    6
  11946. mt_songpos:    DC.b    0
  11947. mt_pattpos:    DC.w    0
  11948. mt_counter:    DC.b    0
  11949.  
  11950. mt_break:    DC.b    0
  11951. mt_dmacon:    DC.w    0
  11952. mt_samplestarts:DS.L    $1f
  11953. mt_voice1:    DS.w    10
  11954.         DC.w    1
  11955.         DS.w    3
  11956. mt_voice2:    DS.w    10
  11957.         DC.w    2
  11958.         DS.w    3
  11959. mt_voice3:    DS.w    10
  11960.         DC.w    4
  11961.         DS.w    3
  11962. mt_voice4:    DS.w    10
  11963.         DC.w    8
  11964.         DS.w    3
  11965.  
  11966. CHEATPTR: dc.l 0
  11967. CHEATNUM: dc.l 0
  11968.  
  11969. testchip: dc.w 0
  11970. DOUBLEHEIGHT: dc.w 0
  11971. DOUBLEWIDTH: dc.w 0
  11972. AUXOBJ: dc.w 0
  11973. PLR1_RoomBright: dc.w 0
  11974.  
  11975. ;/* End of File */
  11976. mt_data: dc.l 0
  11977. tstchip: dc.l 0
  11978.  include "SERIAL_NIGHTMARE"
  11979.  
  11980. ingame:
  11981. ; incbin "ab3:includes/ingame"
  11982. gameover: incbin "ab3:includes/gameover"
  11983. welldone: incbin "ab3:includes/welldone"
  11984.  
  11985.  
  11986.